前言:最近intellij升级后,原本在类中注入的属性都提示Field injection is not recommended

在idea的设置中,使用属性值注入这个警告提示是可以在idea中取消的,但是为什么会有这个提示呢?这就不得不从依赖注入的3中方式说起了。
一,constructor构造器注入(特点:为了强制依赖,或者为了易变性);
二,getter & setter 方法注入(特点:为了可选的或者可变的依赖);
三,field属性注入也就是反射注入,@Autowired就是通过这种方式,这种方式是要尽量避免使用的,也就有了开头的提示信息。
以下就详细说下属性注入的坏处:
1,不能使用属性注入的方式构建不可变对象;
2,此时的类和依赖容器强耦合,不能在容器外使用;
3,你的类不能绕过反射(例如单元测试的时候)进行实例化,必须依赖容器才能实例化;
以上基本就是属性注入的几大劣势了, 但是可能有小伙伴回想,属性注入至少方便啊。比如有一种情况,一个类有超过10个的依赖,如果使用构造方法注入的话,构造方法会有10个参数是不是有点困扰呢??此时使用属性注入就很简洁。此时借用一句话来反击下就是:一个类有很多依赖是一个危险的标志(违背了单一职责原则!)
因此,出现的问题通过构造方法更改如下:

完
探讨了IntelliJ IDEA中关于属性注入的警告原因,分析了依赖注入的三种方式,重点阐述了属性注入的劣势,包括无法构建不可变对象、强耦合问题及测试困难。建议使用构造器注入以遵循单一职责原则。
1万+

被折叠的 条评论
为什么被折叠?



