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