Field injection is not recommended

在使用IDEA编写Spring时, 遇到warning : Field injection is not recommended.

Field injection is not recommended_第1张图片
Field injection is not recommended

那么为什么不推荐Field Injection呢?

通常依赖注入方式有三种
  • constructor
    为了强制依赖,或者为了易变性,使用构造方法注入
  • getter & setter
    为了可选的或者可变的依赖,使用setter注入
  • 通过反射直接注入到fields@Autowired就是通过这种方式
    尽量避免使用直接在属性上注入
属性注入的坏处

1、你不能使用属性注入的方式构建不可变对象。
2、你的类和依赖容器强耦合,不能再容器外使用。
3、你的类不能绕过反射(例如单元测试的时候)进行实例化,必须通过依赖容器才能实例化。
4、实际的依赖被隐藏在外面,不是在构造方法或者其它方法里面反射的。
5、一个类经常会有超过10个的依赖。如果使用构造方法的方式注入的话,构造方法会有10个参数,明显有点蠢。但是如果使用属性注入的话就没有这样的限制。但是一个类有很多的依赖,是一个危险的标志,因为很有可能这个类完成了超过一件事,违背了单一职责原则。

Field injection is not recommended_第2张图片
constructor注入

你可能感兴趣的:(Field injection is not recommended)