2011-09-20 67 views
2

我正在編寫一個Java組件,它將對一些大數據執行相當繁重的工作。因此,顯然,效率(速度和記憶)是最重要的。我也剛開始第一次使用IoC和依賴注入框架(比如Spring AOP,Google Guice等),並且想知道他們是否可以幫我解決問題。Java Collections API上的依賴注入

我希望做的是這樣的(全部在我的代碼):

List<MyData> oMyData = new List<MyData>(); 

然後,在一些XML配置文件(或不過框架配置注射),我會規定每個在創建List的實例時,要注入一個ArrayList<MyData>作爲它的實現。通過這種方式,如果我決定使用不同的實現,或者甚至是比本地應用更適合我的應用的東西,那麼它比Java Collections提供的任何東西都更有效,所以我只需要更改被注入的類。沒有其他修改是必要的,我的代碼將更有效地運行。

這是一個可能的解決方案,還是這只是大夢?再說一遍,因爲我對IoC框架是如此的陌生,很難分辨注入哪些對象會起作用,在注入過程中是否可以保留泛型以及其他各種複雜的細節,我似乎無法在其他任何地方找到答案。

在此先感謝您的任何見解或建議!

回答

3

這聽起來不像IOC容器的經典場景,但您可以使用工廠方法。

public static List<MyData> createDataList(){ 
    return new ArrayList<MyData>(); 
} 

在您的應用程序中使用此工廠方法。現在,如果您想使用不同的列表實現,只需更改此方法即可。看媽媽,不需要容器。

要明確:國際奧委會是一個很棒的概念。但我不認爲你在談論的是國際奧委會的典型場景。

+0

然後從這裏開始,您可以使用IOC在運行時選擇不同的工廠。 AFAIK,IOC是關於注入類的實例,而不是類本身,所以函數不會是靜態的。 – Chris

+0

@Chris不同工廠的方法當然是有效的,但可能不適合像這樣的基本任務。 –

+0

謝謝肖恩!我確實有幾個保留。首先,雖然我還是一個相當新的企業開發人員,但它一次又一次地被我打敗,因爲工廠方法很難進行測試,因此很難進行測試。注射是新的途徑。你能否迅速解釋爲什麼你認爲國際奧委會是一個偉大的理念,但不是爲了這個場景?在這一天結束時,我想要最好的/最優雅的解決方案,所以我沒有任何偏好(工廠或注入),我只是好奇哪些場景需要工廠與注入解決方案。謝謝! – IAmYourFaja

1

這是你在找什麼?

<util:list list-class="java.util.ArrayList" value-type="your.package.YourClass"> 
    <!-- list elements here --> 
</util:list> 

這出來的最有彈簧箱...

0

什麼你的目標是非常可能的,實際上是一個很好的建議的做法,也被稱爲依賴注入。

你可以用Spring來做這個。當然,注入對象的確切語法將與你在這裏顯示的有很大不同。

春季,例如,你會寫

List<MyData> oMyData = factory.getBean("MyData")

在一個單獨的配置文件,您可以指定到底是什麼MyData,而這將讓注入。

0

如前所述,您的案例描述對於DI解決方案來說有點不合常規。特別是要調整這種方式的表現有些不合適。我懷疑在這方面確實取得成功,你甚至需要針對不同的注射地點實施多個實施。如果你想去那,我建議使用Silk DI。它允許綁定到不同情況下的不同List實現http://www.silkdi.com/userguide/binds.html#targeting只需幾個綁定。