2

我刚开始学习Spring,我有一个问题:

为了注入一个bean,什么时候最好使用基于属性的依赖注入:

 <bean id="myFirstClass" class="...">
  <property name="targetProperty">
     <bean id="TheBeanIwantToInject" class="..."/>
  </property>
 </bean>

而不是基于构造函数的依赖注入

<bean id="myFirstClass" class="...">
  <constructor-arg ref="TheBeanIwantToInject"/>
</bean>

还是只是两个等效的解决方案?

4

3 回答 3

4

如果要创建不可变对象,则构造函数参数变体是唯一的选择。我更喜欢那个。

于 2013-04-28T19:00:23.353 回答
2

如果您有双向依赖项,则需要将其中之一进行属性注入。通常,如果您有这种情况,您应该考虑您的架构。例如,可以在一个新类中提取相互依赖关系

于 2013-04-28T19:28:50.003 回答
1

您需要诚实地查看您在代码中所做的事情以及有意义的事情。从纯 OO 的角度来看,如果您的类需要依赖项才能工作并且永远不应更改,请使用构造函数注入。如果您需要默认依赖项但它可能会更改(或可选的),请使用属性。

然而,这是一个圣战类型的问题。我应该使用 XML 还是 Autowire,应该通过属性或构造函数注入。真正的关键是保持一致。如果您始终如一,即使根据 OO 原则在技术上不正确,下一个必须在您的代码中工作的可怜的开发人员也是有意义的。如果你前后不一致,我会为下一个人感到难过。

我的偏好(无关紧要)是尽可能多地使用构造函数注入,它允许我拥有更简洁的代码,而没有可能破坏封装逻辑的所有 getter 和 setter。

于 2013-04-29T02:17:30.100 回答