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
Spring 弹簧设定器注入和构造器注入_Spring - Fatal编程技术网

Spring 弹簧设定器注入和构造器注入

Spring 弹簧设定器注入和构造器注入,spring,Spring,请让我们帮助理解在哪种情况下我应该使用用户构造函数注入和setter注入。请帮我举个适当的例子 提前谢谢 我们通常建议人们使用构造函数注入 所有其他属性的强制协作者和setter注入。 同样,构造函数注入确保所有必需属性都具有 已经满足了,并且根本不可能实例化一个对象 处于无效状态(未通过其协作者)。换句话说 换句话说,当使用构造函数注入时,您不必使用 确保设置所需属性的专用机制(除 普通Java机制) 更多细节 我们通常建议人们使用构造函数注入 所有其他属性的强制协作者和setter注入。 同

请让我们帮助理解在哪种情况下我应该使用用户构造函数注入和setter注入。请帮我举个适当的例子

提前谢谢

我们通常建议人们使用构造函数注入 所有其他属性的强制协作者和setter注入。 同样,构造函数注入确保所有必需属性都具有 已经满足了,并且根本不可能实例化一个对象 处于无效状态(未通过其协作者)。换句话说 换句话说,当使用构造函数注入时,您不必使用 确保设置所需属性的专用机制(除 普通Java机制)

更多细节

我们通常建议人们使用构造函数注入 所有其他属性的强制协作者和setter注入。 同样,构造函数注入确保所有必需属性都具有 已经满足了,并且根本不可能实例化一个对象 处于无效状态(未通过其协作者)。换句话说 换句话说,当使用构造函数注入时,您不必使用 确保设置所需属性的专用机制(除 普通Java机制)


更多细节

就我个人而言,我倾向于构造函数注入,我这样做有一个主要原因

不变性

对于不可变对象,更容易使代码线程安全。这在处理Spring
singleton
scope对象时尤其重要。如果它们是可变的,并且在不同的线程中访问,那么更改任何共享状态都是不安全的


不变性是有益的还有其他原因,但我会继续讲下去。

就我个人而言,我倾向于构造函数注入,我这样做有一个主要原因

不变性

对于不可变对象,更容易使代码线程安全。这在处理Spring
singleton
scope对象时尤其重要。如果它们是可变的,并且在不同的线程中访问,那么更改任何共享状态都是不安全的


不变性是有益的还有其他原因,但我会继续讲下去。

你说得对,关键是不变性。许多Spring用户应该知道在不使用不可变对象的情况下GC是如何起作用的。你是对的,关键是不可变。许多Spring用户应该知道在不使用不可变对象的情况下GC是如何起作用的。我以前见过这种解释,但仍然无法理解其背后的含义。这里的强制合作者是什么?如果我尝试在field/constructor/setter上注入不存在的bean,初始化将失败。那么,我怎么能不满足所需的依赖关系呢?(除了将null作为ctor arg传递之外)我以前看到过这种解释,但仍然无法理解其背后的含义。这里的强制合作者是什么?如果我尝试在field/constructor/setter上注入不存在的bean,初始化将失败。那么,我怎么能不满足所需的依赖关系呢?(除了将null作为ctor arg传递之外)