Spring注入的方式对比


三种方式

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个参数,明显有点蠢。但是如果使用属性注入的话就没有这样的限制。但是一个类有很多的依赖,是一个危险的标志,因为很有可能这个类完成了超过一件事,违背了单一职责原则。

原文地址:https://www.cnblogs.com/yuanhailiang/p/9722421.html