当前位置: 首页 > 知识库问答 >
问题:

Spring setter注入和构造函数注入

相温文
2023-03-14

请帮助理解在哪种情况下我应该使用构造函数注入和设置器注入。请帮我举个合适的例子。

先谢谢你。

共有2个答案

斜浩穰
2023-03-14

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

不变性。

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

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

靳富
2023-03-14

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

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

 类似资料:
  • 大家都知道@Autowired(@Inject etc)注释是由AutowiredAnnotationBeanPostProcessor处理的。它解析并设置用@Autowired注释的字段和setter,但构造函数呢?这是bean后处理器,这意味着它是在已经创建bean之后调用的,但是构造函数也可以标记为@Autowired,那么如何创建这样的bean呢?

  • 我把下面的内容看做是构造函数和setter注入的区别之一。有人能用一些简单的例子解释一下下面的区别吗,我对术语完全功能对象和不完全对象有点困惑。 -

  • 注入是将依赖注入对象的过程。 构造函数注入很常见。 在此过程中,依赖项作为参数注入构造函数。 请参阅下面的示例。 创建一个名为GuiceTester的java类。 GuiceTester.java import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Inj

  • 有人能帮助实现没有注释的Guice吗? pom。xml 我所尝试的: 我得到的错误是: 我理解这个错误。 但是我希望我可以“指向”Guice到正确的构造函数......而不是使用注释。 如您所见,使用默认/空构造函数不是一个好选择,因为这个示例很简单,但我想坚持使用基于构造函数的注入。 附加: 根据我在评论中从赫曼特·辛格那里得到的“暗示”,我想我离得更近了。 我创建了一个ProductionIn

  • 本文向大家介绍Design patterns 构造函数注入(C#),包括了Design patterns 构造函数注入(C#)的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我想在构造函数中使用Request类,这是我想运行服务器时它给我的错误: 无法自动连接服务"AppBundle\Controller\DetectServiceDetailController":方法"__construct()"引用类"Symfony\Component\HttpFoundation\Request"的参数"$ask",但不存在这样的服务。它不能自动注册,因为它来自不同的根命名空