Java 弹簧调节器注射保证
从构造函数注入移动到setter注入安全吗 setter注入是否保证我的对象在使用时完全构建?是的,它是安全的 使用构造函数注入,Spring将使用适当的参数调用构造函数(注意,在这种情况下,您可以向依赖项字段添加Java 弹簧调节器注射保证,java,spring,Java,Spring,从构造函数注入移动到setter注入安全吗 setter注入是否保证我的对象在使用时完全构建?是的,它是安全的 使用构造函数注入,Spring将使用适当的参数调用构造函数(注意,在这种情况下,您可以向依赖项字段添加final修饰符) 样品 private final SomeBean dependency; public MyObject(SomeBean dependency){ this.dependency = dependency; doInit(); } priva
final
修饰符)
样品
private final SomeBean dependency;
public MyObject(SomeBean dependency){
this.dependency = dependency;
doInit();
}
private void doInit(){
//doStuff to initialize your bean
}
@Autowired
private SomeBean dependency;
@PostConstruct
private void doInit(){
//doStuff to initialize your bean
}
通过setter注入,Spring将使用默认构造函数(即无arg构造函数)实例化bean。
下一步是调用所有必需的setter,以便设置所有@Autowired依赖项。
最后,Spring将调用带有@PostConstruct注释的方法
样品
private final SomeBean dependency;
public MyObject(SomeBean dependency){
this.dependency = dependency;
doInit();
}
private void doInit(){
//doStuff to initialize your bean
}
@Autowired
private SomeBean dependency;
@PostConstruct
private void doInit(){
//doStuff to initialize your bean
}
使用setter注入有一个优点:在bean之间存在循环依赖的情况下,Spring将能够解决它们(因为它可以使用部分构建的bean调用setter)。(如果您的setter是真正的setter,并且只需为字段赋值就可以了)
另一方面,Spring在使用构造函数注入时无法解析循环依赖关系,原因很简单,部分构建bean不能恰当地用作构造函数参数 我来晚了一点,但这是我的2分2分
- 在任何OO语言中
- 最好是由于循环依赖项注入而快速失败,因为这是一个设计错误。没有注意到它们可能会对你以后的生活产生负面影响李>