應用控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用,傳遞給它。也能夠說,依賴被注入到對象中。因此,控制反轉是,關於一個對象如何獲取他所依賴的對象的引用,這個責任的反轉。 java
1
2
3
4
5
6
7
8
9
|
|
Class A
{
AInterface a;
A() { }
aMethod()
{
a =newAInterfaceImp();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
InterfaceImplFactory
{
AInterface create(Object condition)
{
if(condition = condA)
{
returnnewAInterfaceImpA();
}
elseif(condition = condB)
{
returnnewAInterfaceImpB();
}
else
{
returnnewAInterfaceImp();
}
}
}
|
在上面的幾個IOC容器中,輕量級的有Pico Container、Avalon、Spring、HiveMind等,超重量級的有EJB,而半輕半重的有容器有JBoss,Jdon等。 程序員
IoC最大的缺點是什麼?(1)生成一個對象的步驟變複雜了(事實上操做上仍是挺簡單的),對於不習慣這種方式的 人,會以爲有些彆扭和不直觀。(2)對象生成由於是使用反射編程,在效率上有些損耗。但相對於IoC提升的維護性和靈活性來講,這點損耗是微不足道的,除 非某對象的生成對效率要求特別高。(3)缺乏IDE重構操做的支持,若是在Eclipse要對類更名,那麼你還須要去XML文件裏手工去改了,這彷佛是所 有XML方式的缺憾所在。 編程
類型3 (基於構造函數): 經過構造函數的參數爲可服務對象指定服務。PicoContainer只使用這種方式。HiveMind和Spring也使用這種方式。 設計模式