2013-04-28 126 views
2

我剛開始研究我和春天有個問題:物業爲主或基於構造函數的依賴注入

爲了注入一個bean的時候,就是它更好地使用基於屬性的依賴注入:

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

,而不是基於構造函數的依賴注入

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

,或者它只是兩個相同的解決方案?

+1

這是怎樣的一個宗教......無論你喜歡你自己應該做的。 – NilsH 2013-04-28 19:02:10

回答

4

如果你想創建一個不可改變的對象,然後構造帶參數的變異是唯一的選擇。我更喜歡那個。

+0

那麼,這並不完全正確。使用Java Config,您可以自動裝配私人字段。 – NilsH 2013-04-28 19:01:18

+1

@NilsH甚至最後的字段?如果是的話,我同意並將刪除我的答案。 – maba 2013-04-28 19:03:35

+0

@NilsH你不需要*使用Java配置來自動裝載專用字段,它也可以通過'classic'xml配置來完成。 – 2013-04-28 19:06:56

2

,如果你有雙向依賴你將需要其中之一是財產注入。通常你應該考慮你的架構,如果你有這樣的情況。相互依賴可以在一個新類中提取例如

1

你需要誠實地看着你的代碼在做什麼,情理之中的事情。從純粹的面向對象的角度來看,如果您需要依賴於您的類的工作,並且永遠不應該改變,那就使用構造函數注入。如果您需要默認依賴關係,但可能會更改(或可選),請使用屬性。

但是,這是一個神聖的戰爭類型的問題。我應該使用XML還是Autowire,應該通過屬性還是構造函數進行注入。真正的關鍵是一致的。如果你是一致的,那麼對於下一個可憐的開發人員來說,即使它在技術上不符合OO原則的正確性,也必須在你的代碼中工作。如果你不一致,我爲下一個人感到抱歉。

我的喜好,而不是它的問題,就是要儘可能多地使用構造函數注入,它讓我有更清晰的代碼沒有所有可能破壞封裝邏輯的getter和setter。

相關問題