繁体   English   中英

弹簧塞注射保证

[英]Spring setter injection guarantee

将表单构造函数注入转换为setter注入是否安全?

setter注入是否可以确保在使用时完全构造我的对象?

是的,这很安全。

使用构造函数注入 ,Spring将使用适当的参数调用构造函数(请注意,在这种情况下,您可以将final修饰符添加到依赖项字段中)。

样品

private final SomeBean dependency;

public MyObject(SomeBean dependency){
    this.dependency = dependency;
    doInit();
}

private void doInit(){
    //doStuff to initialize your bean
}

使用setter注入 ,Spring将使用默认构造函数(即,没有arg构造函数)实例化bean。 下一步是调用所有必需的setter,以便设置所有@Autowired依赖项。 最后,Spring将调用带有@PostConstruct批注的方法。

样品

@Autowired
private SomeBean dependency;

@PostConstruct
private void doInit(){
    //doStuff to initialize your bean
}

使用setter注入有一个优点:在bean之间存在循环依赖的情况下,Spring将能够解决它们(因为它可以使用部分构建bean调用setter)。 (如果您的设置员是真正的设置员,并且除了向字段分配值外,还可以做其他事情就可以了)

另一方面,使用构造函数注入时,Spring无法解决循环依赖关系,这仅仅是因为部分构建的bean无法体面地用作构造函数参数。

我参加聚会有点晚了,但这是我的2分2分,

  • 在任何OO语言中, setter / field注入都是邪恶的
  • 最好是由于循环依赖注入而快速失败,因为这是设计错误。 并且不注意它们可能会对您的后续行为产生不利影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM