Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧调节器注射保证_Java_Spring - Fatal编程技术网

Java 弹簧调节器注射保证

Java 弹簧调节器注射保证,java,spring,Java,Spring,从构造函数注入移动到setter注入安全吗 setter注入是否保证我的对象在使用时完全构建?是的,它是安全的 使用构造函数注入,Spring将使用适当的参数调用构造函数(注意,在这种情况下,您可以向依赖项字段添加final修饰符) 样品 private final SomeBean dependency; public MyObject(SomeBean dependency){ this.dependency = dependency; doInit(); } priva

从构造函数注入移动到setter注入安全吗

setter注入是否保证我的对象在使用时完全构建?

是的,它是安全的

使用构造函数注入,Spring将使用适当的参数调用构造函数(注意,在这种情况下,您可以向依赖项字段添加
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语言中
  • 最好是由于循环依赖项注入而快速失败,因为这是一个设计错误。没有注意到它们可能会对你以后的生活产生负面影响
两种注射剂都保证了这一点。然而,构造函数中的注入可能有一些与循环依赖相关的限制。