【问题标题】:Spring setter injection and constructor injectionSpring setter 注入和构造函数注入
【发布时间】:2012-07-11 11:58:29
【问题描述】:

请帮助了解我应该在哪种情况下使用构造函数注入和 setter 注入。请帮助我提供适当的示例。

提前致谢。

【问题讨论】:

    标签: spring


    【解决方案1】:

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

    更多详情http://blog.springsource.org/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/

    【讨论】:

    • 我以前看过那个解释,但仍然无法理解这背后的想法。这里的强制合作者是什么?如果我尝试在字段/构造函数/设置器上注入不存在的 bean,初始化无论如何都会失败。那么我怎么能不满足所需的依赖项呢?(除了将 null 作为 ctor arg 传递)
    【解决方案2】:

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

    不变性。

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

    不变性是有益的还有其他原因,但我会让webpage 继续讨论这个问题。

    【讨论】:

    • 你说得对,关键是不变性。许多 Spring 用户应该知道不使用不可变对象时 GC 是如何影响的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多