三种方式是field injection、constructor injection、setter injection,使用字段注入时idea会警告说不推荐这种方式,本文会从原理的角度解释三种方式的特点。
    1.不推荐字段注入的三个原因:
    字段的外部可见性:使用字段注入则这个类完全依赖容器装配,如果是构造器注入则仍然可以用new来创建和使用这个类的对象。有可能当需要写特定的测试用例,需要调用这个方法的时候,只能用反射的办法编码。
    不能发现循环依赖:构造器注入不允许循环依赖,字段注入Spring会处理循环依赖的情况。
    无法设置注入对象为final:原因是字段必须在类实例化的时候进行实例化。构造器注入能确保注入的组件不可变,以及依赖不为空。简单说就是创建时还是使用到相应对象时检查是不是空。
    2.setter注入用途:它是构造器注入的一个补充,用来灵活的应对特定情况。
    它有三个特点:按需注入、可读性好、能正确处理循环依赖