1. 程式人生 > 其它 >談談你對IOC的理解

談談你對IOC的理解

談談你對IOC的理解

容器概念、控制反轉、依賴注入
ioc容器:

實際上就是個map(key, value) , 裡面存的是各種物件(在xml裡配置的bean節點、@repository、 @service、@controller、@component) , 在專案啟動的時候會讀取配置檔案裡面的bean節點, 根據全限定類 名使用反射建立物件放到map裡、掃描到打上上述註解的類還是通過反射建立物件放到map裡。 這個時候map裡就有各種物件了, 接下來我們在程式碼裡需要用到裡面的物件時, 再通過DI注入(autowired、 resource等註解, xml裡bean節點內的ref屬性, 專案啟動的時候會讀取xml節點ref屬性根據id注入, 也會掃描這 些註解,根據型別或id注入;id就是物件名)。

控制反轉:

沒有引入IOC容器之前,物件A依賴於物件B,那麼物件A在初始化或者執行到某一點的時候,自己必須主動去建立 物件B或者使用已經建立的物件B。無論是建立還是使用物件B,控制權都在自己手上。

引入IOC容器之後,物件A與物件B之間失去了直接聯絡,當物件A執行到需要物件B的時候,IOC容器會主動建立 一個物件B注入到物件A需要的地方。

通過前後的對比,不難看出來:物件A獲得依賴物件B的過程,由主動行為變為了被動行為,控制權顛倒過來了,這 就是“控制反轉這個名稱的由來。

全部物件的控制權全部上繳給"第三方"IOC容器,所以, IOC容器成了整個系統的關鍵核心,它起到了一種類似“粘 合劑"的作用,把系統中的所有物件粘合在一起發揮作用,如果沒有這個“粘合劑",物件與物件之間會彼此失去聯 系, 這就是有人把IOC容器比喻成粘合劑"的由來。

依賴注入:

"獲得依賴物件的過程被反轉了"。控制被反轉之後, 獲得依賴物件的過程由自身管理變為了由IOC容器主動注入。 依賴注入是實現IOC的方法, 就是由IOC容器在執行期間, 動態地將某種依賴關係注入到物件之中。