我試圖打開我的腦海花式的IoC原則,我碰到的文章來的IoC的好處: Martin fowler on IoC廠VS PicoContainer的 - 集裝箱
他提供了使用PicoContainer的的一些例子:
private MutablePicoContainer configureContainer() {
MutablePicoContainer pico = new DefaultPicoContainer();
Parameter[] finderParams = {new ConstantParameter("movies1.txt")};
pico.registerComponentImplementation(MovieFinder.class, ColonMovieFinder.class, finderParams);
pico.registerComponentImplementation(MovieLister.class);
return pico;
}
然後樣品用量:
public void testWithPico() {
MutablePicoContainer pico = configureContainer();
MovieLister lister = (MovieLister) pico.getComponentInstance(MovieLister.class);
Movie[] movies = lister.moviesDirectedBy("Sergio Leone");
assertEquals("Once Upon a Time in the West", movies[0].getTitle());
}
首先想到的是,爲什麼要使用像PicoContainer這樣複雜的東西來配置對象的創建 - 實際上應用依賴注入 - (我是.NET開發人員,所以在.NET中它可能需要使用反射,這是耗時),當我們可以實現相同封裝的對象創建(例如)工廠或建設者,與快速新運算符。
另一件事:configureContainer()仍然被編譯,確切的類型是在編譯時指定的。那麼爲什麼不使用工廠,並在配置文件中決定使用哪個工廠?
由於我剛剛接觸這種方法,我想我在IoC容器的好處方面缺少一些東西。