Field injection is not recommended

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

Field injection is not recommended

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

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

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

constructor注入
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容