请帮助了解我应该在哪种情况下使用构造函数注入和 setter 注入。请帮助我提供适当的示例。
提前致谢。
我们通常建议人们对所有强制协作者使用构造函数注入,对所有其他属性使用 setter 注入。同样,构造函数注入可确保满足所有强制属性,并且根本不可能实例化处于无效状态的对象(未传递其协作者)。换句话说,当使用构造函数注入时,您不必使用专用机制来确保设置所需的属性(除了普通的 Java 机制)。
就个人而言,我倾向于构造函数注入,我这样做有一个主要原因。
不变性。
使用不可变对象,更容易使代码线程安全。这在处理 Springsingleton
范围对象时尤其重要。如果它们是可变的,并且在不同的线程中访问,那么更改任何共享状态都是不安全的。
不变性是有益的还有其他原因,但我会让网页继续讨论这个问题。