三种方式
1.构造方法注入
为了强制依赖,或者为了易变性,
2.getter&setter方法
为了可选或者可变的依赖
3.反射直接注入到fields@Autowired方式
尽量避免这样
public class Controller{
//通过构造器注入
private final DependencyA dependencyA;
private final DependencyB dependencyB;
@Autowired
public Controller(DependencyA dependencyA,DependencyB dependencyB){
this.dependencyA = dependencyA;
this.dependencyB = dependencyB;
}
//通过set方法注入
private DependencyA dependencyA;
private DependencyB dependencyB;
@Autowired
public void setDependencyA(DependencyA dependencyA){
this.dependencyA = dependencyA;
}
@Autowired
public void setDependencyB(DependencyB dependencyB){
this.dependencyB = dependencyB;
}
//通过field注入
@Autowired
private DependencyA dependencyA;
@Autowired
private DependencyB dependencyB;
}
作者:yxktiming
链接:https://www.jianshu.com/p/36db3e167958
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
属性注入的坏处
1、你不能使用属性注入的方式构建不可变对象。2、你的类和依赖容器强耦合,不能再容器外使用。3、你的类不能绕过反射(例如单元测试的时候)进行实例化,必须通过依赖容器才能实例化。4、实际的依赖被隐藏在外面,不是在构造方法或者其它方法里面反射的。5、一个类经常会有超过10个的依赖。如果使用构造方法的方式注入的话,构造方法会有10个参数,明显有点蠢。但是如果使用属性注入的话就没有这样的限制。但是一个类有很多的依赖,是一个危险的标志,因为很有可能这个类完成了超过一件事,违背了单一职责原则。