spring注入方式 构造器注入,set注入对比
spring3.x推荐使用set注入
为什么spring4.x以后又推荐构造器注入
下面这篇博客写的过于好,可以看看下面的博客。
http://t.zoukankan.com/Donnnnnn-p-10405863.html
总结:
构造器注入的好处:
1、依赖不可变
2、依赖不为空
3、完全初始化的状态
Q1:跟3.x里说的一样,我要是有大量的依赖要注入,构造方法不会显得很臃肿吗?
对于这个问题,说明你的类当中有太多的责任,那么你要好好想一想是不是自己违反了类的单一性职责原则,从而导致有这么多的依赖要注入。
Q2:是不是其他的注入方式都不适合用了呢?
当然不是,存在即是合理!setter的方式既然一开始被Spring推荐肯定是有它的道理,像之前提到的setter的方式能用让类在之后重新配置或者重新注入,就是其优点之一。除此之外,如果一个依赖有多种实现方式,我们可以使用@Qualifier
,在构造方法里选择对应的名字注入,也可以使用field或者setter的方式来手动配置要注入的实现。
有点迷惑filed注入,
filed注入其实就是@Autowired写在属性变量上的注入方式。
构造器注入还可以避免 Field 注入的循环依赖问题
可以看看@Autowired的底层原理
https://zhuanlan.zhihu.com/p/467129172