构造函数注入VS字段注入
问题描述:
当注入的任何服务,我有两个选择:构造函数注入VS字段注入
(字段注入)
@Inject
private MyService myService;
或(构造函数注入)
private MyService myService;
@Inject
public ClassWhereIWantToInject(MyService mySerivce){
this.myService = myService;
}
为什么构造方法注入是较好比归档注射?
答
做这样的事情(我假设你正在使用的弹簧引导或您的CDI东西可比)
public class ClassWhereIWantToInject{
private MyService myService;
@Inject
public ClassWhereIWantToInject(MyService mySerivce){
this.myService = myService;
}
}
在这个相关的question有一些有效的参数为什么通过现场通过构造函数中使用,而不是注射注射。它归结为可以在非CDI环境(即单元测试)中通过构造函数使用初始化的优点,而无需添加更复杂的逻辑。
答
答案是here
字段注入将被正确地执行,如果包含此注入将由框架(弹簧/ EJB/CDI)被注入,否则类(类将由呼叫者使用实例化的新的操作符),这真的是一个NullPointerException等待发生。在这种情况下,最好使用构造函数注入。
我们可以执行可靠的字段注入,当注入将在由框架注入的类中进行时。
什么是这个错误的声纳描述? – Chris311
查看相关规则描述([this one](https://sonarqube.com/coding_rules#rule_key=squid%3AS3306))。然后我建议你更新你的问题,如果有些事情还不清楚的话,就可以通过对实际描述的查询来更新。 –
非常感谢@Nicolas – Riadh