反轉(zhuǎn)了什么:將原有的【自己主動(dòng)依賴另一個(gè)對(duì)象到自身】,反轉(zhuǎn)成為【由第三方管理容器來主動(dòng)注入另一個(gè)對(duì)象到自身】,獲取另一個(gè)對(duì)象的控制權(quán)由原有的【自身】反轉(zhuǎn)到了【IOC容器主動(dòng)注入
所以【控制反轉(zhuǎn)】和【依賴注入】實(shí)際上是從不同角度描述一個(gè)事件,控制反轉(zhuǎn)(IOC)描述【控制權(quán)的移交】,依賴注入(DI)描述【對(duì)象“依賴“ioc容器對(duì)自身“注入“另一個(gè)對(duì)象】
轉(zhuǎn)為
由一個(gè)第三方容器來控制,將所需的對(duì)象進(jìn)行分配,實(shí)現(xiàn)對(duì)象之間的解耦
??? 軟件系統(tǒng)在沒有引入IOC容器之前枪萄,如圖1所示逻悠,對(duì)象A依賴于對(duì)象B象浑,那么對(duì)象A在初始化或者運(yùn)行到某一點(diǎn)的時(shí)候,自己必須主動(dòng)去創(chuàng)建對(duì)象B或者使用已經(jīng)創(chuàng)建的對(duì)象B洛巢。無論是創(chuàng)建還是使用對(duì)象B恃慧,控制權(quán)都在自己手上糕伐。
??? 軟件系統(tǒng)在引入IOC容器之后褥蚯,這種情形就完全改變了澳骤,如圖3所示为肮,由于IOC容器的加入忘分,對(duì)象A與對(duì)象B之間失去了直接聯(lián)系肯骇,所以,當(dāng)對(duì)象A運(yùn)行到需要對(duì)象B的時(shí)候拆融,IOC容器會(huì)主動(dòng)創(chuàng)建一個(gè)對(duì)象B注入到對(duì)象A需要的地方。
??? 通過前后的對(duì)比般贼,我們不難看出來:對(duì)象A獲得依賴對(duì)象B的過程,由主動(dòng)行為變?yōu)榱吮粍?dòng)行為,控制權(quán)顛倒過來了奥吩,這就是“控制反轉(zhuǎn)”這個(gè)名稱的由來哼蛆。