在注射任何服务时,我有两个选择:
场注入:
@Inject
private MyService myService;或构造器注入:
private MyService myService;
@Inject
public ClassWhereIWantToInject(MyService mySerivce){
this.myService = myService;
}为什么构造器注入比现场注入更好
发布于 2019-03-25 14:57:12
我在现场注射中只发现了两个缺点。
@InjectMocks解析)A依赖于bean B,而bean B则需要bean A。如果您有构造函数注入,很容易找到它。发布于 2016-11-22 09:16:47
做类似的事情(我猜想你使用的是spring-boot或类似于CDI的东西)。
public class ClassWhereIWantToInject{
private MyService myService;
@Inject
public ClassWhereIWantToInject(MyService mySerivce){
this.myService = myService;
}
}在这个相关的question中,有一些有效的论点,为什么要通过构造函数使用注入而不是通过字段进行注入。它的优点在于,您也可以在非CDI环境(即单元测试)中通过构造函数使用初始化,而无需添加更复杂的逻辑。
发布于 2019-08-20 19:22:07
阅读这篇优秀的文章(https://blog.marcnuri.com/field-injection-is-not-recommended/),我们可以找到更好的解释为什么场注入不是一个好的选择。
它不允许我们使用最终的关键字使Field 不可变。
一旦拥有这个字段的类开始对第三方类的初始化时间承担一些责任,它也将进一步远离SRP (单责任原则)。
https://stackoverflow.com/questions/40737720
复制相似问题