
1.IoC
控制反轉(zhuǎn)(Inversion of Control)是一種是面向?qū)ο缶幊讨械囊环N設(shè)計原則,用來減低計算機(jī)代碼之間的耦合度。其基本思想是:借助于“第三方”實現(xiàn)具有依賴關(guān)系的對象之間的解耦。

由于引進(jìn)了中間位置的“第三方”,也就是IOC容器,使得A、B、C、D這4個對象沒有了耦合關(guān)系,齒輪之間的傳動全部依靠“第三方”了,全部對象的控制權(quán)全部上繳給“第三方”IOC容器,所以,IOC容器成了整個系統(tǒng)的關(guān)鍵核心,它起到了一種類似“粘合劑”的作用,把系統(tǒng)中的所有對象粘合在一起發(fā)揮作用,如果沒有這個“粘合劑”,對象與對象之間會彼此失去聯(lián)系,這就是有人把IOC容器比喻成“粘合劑”的由來。
具體來看看:
第一幅圖來說:objA依賴于ObjB,所以當(dāng)ObjA初始化或運行到某個點需要創(chuàng)建ObjB或者使用已經(jīng)創(chuàng)建好的ObjB,主動權(quán)都是在自己手里的。
第二幅圖:系統(tǒng)在引入了IoC容器后,objA和ObjB以及其他對象失去了直接聯(lián)系,當(dāng)ObjA運行到需要objB時,IoC容器會主動創(chuàng)建一個ObjB注入到obj需要的地方。
分析來看,objA獲得依賴的過程由主動變成了被動,這就是控制反轉(zhuǎn)。
依賴注入就是將實例變量傳入到一個對象中去(Dependency injection means giving an object its instance variables)。
1.非自己主動初始化依賴,而通過外部來傳入依賴的方式
2.解耦,將依賴之間解耦。
3.因為已經(jīng)解耦,所以方便做單元測試,尤其是 Mock 測試。
控制反轉(zhuǎn)是一種思想;
依賴注入是一種設(shè)計模式
IoC框架使用依賴注入作為實現(xiàn)控制反轉(zhuǎn)的方式,但是控制反轉(zhuǎn)還有其他的實現(xiàn)方式,例如說ServiceLocator,所以不能將控制反轉(zhuǎn)和依賴注入等同