2009-04-18 72 views
2

我是D.I.的粉絲。
我目前正在開發一個使用D.I.的非那麼小的項目。無處不在
(經典漂亮D.I. 手工)。Java:依賴注入外部構造對象?

從我的角度來看有以下優點:

  • 當你習慣了直觀
  • 不影響可讀性以消極的方式 (其實,它變得更好),
  • 但最重要的是:如果我想測試部分或整個項目 與一些接口的不同實現,我可以通過更改 幾個字符,而不是做複雜的重構/重命名或其他解決方法。

但是,可悲的是,我不明白,怎麼D.I.可以用優雅的方式與國外創建的對象(沒有一些框架,請記住, 我手工做D.I.)。

D.I.手工表示:你傳遞一些東西給C-tor。 沒有全球工廠或類似的,上帝保佑!例如,JAXB自己創建對象。 無法告訴JAXBContext:「請使用以下參數創建我的 對象」。 JAXB只接受無參數的c-tors。

任何想法?

回答

0

人們已經知道使用getter injection來做到這一點。我不知道如何在luddite DI環境中做到這一點。

2

JAXBContext不是使用factory method嗎?你可以像傳入構造函數一樣將參數傳遞給它。如果這不符合你的要求,創建對象後傳統的setter注入(即調用context.setXyz(xyzInstance)方法)將手工模擬spring等人自動執行的操作...

+0

+1我會去任何一個建議。 @ivan如果你仍然不習慣可以調用它的代碼行,請將它們包裝起來,並將代碼移到其他地方。它的限制,你必須在某個時候處理它。我也不知道Java是否允許,但在.net中,您可以通過反射調用已經實例化的對象的構造函數。 – eglasius 2009-04-18 10:00:05

3

爲什麼「DI手動」必須意味着「把東西傳遞給C-tor」?

你可以這樣做嗎?

ThingOne one = new ThingOne(); 
one.setInjectedItem(a); 
one.setOtherInjectedItem(b); 

在春天依賴注入,這將通過屬性注入,我不明白爲什麼這不能「手工」完成。