Ioc理論(DI理論)基礎

一、基本信息

英文全稱:Inversion of Control
中文解釋:多數書籍翻譯成“控制反轉”
別稱:DI(Dependency Injection)理論
目的:用來實現對象(類)之間的“解耦”
提出者:軟件專家Michael Mattson
使用了該理論的典型框架:spring
應用:很多的J2EE項目均採用了IOC框架產品Spring
解耦原理:把複雜系統分解成相互合作的對象,這些對象類通過封裝以後,內部實現對外部是透明的,從而降低了解決問題的複雜度,而且可以靈活地被重用和擴展。藉助於“第三方”實現具有依賴關係的對象之間的解耦,這個第三方就是Ioc容器。

二、名稱由來

1.IOC(控制反轉)名稱的由來:

軟件系統在沒有引入IOC容器之前,假如對象A依賴於對象B,那麼對象A在初始化或者運行到某一點的時候,自己必須主動去創建對象B或者使用已經創建的對象B。無論是創建還是使用對象B,控制權都在自己手上。
軟件系統在引入IOC容器之後,這種情形就完全改變了,由於IOC容器的加入,對象A與對象B之間失去了直接聯繫,所以,當對象A運行到需要對象B的時候,IOC容器會主動創建一個對象B注入到對象A需要的地方。
通過前後的對比,我們不難看出來:對象A獲得依賴對象B的過程,由主動行爲變爲了被動行爲,控制權顛倒過來了,這就是“控制反轉”這個名稱的由來。

2.DI(即“依賴注入”,是“控制反轉”的別稱)的名稱由來與原理:

2004年,Martin Fowler探討了同一個問題,既然IOC是控制反轉,那麼到底是“哪些方面的控制被反轉了呢?”,經過詳細地分析和論證後,他得出了答案:“獲得依賴對象的過程被反轉了”。控制被反轉之後,獲得依賴對象的過程由自身管理變爲了由IOC容器主動注入。於是,他給“控制反轉”取了一個更合適的名字叫做“依賴注入(Dependency Injection)”。他的這個答案,實際上給出了實現IOC的方法:注入。所謂依賴注入,就是由IOC容器在運行期間,動態地將某種依賴關係注入到對象之中。

3.兩種名稱的關係:

依賴注入(DI)和控制反轉(IOC)是從不同的角度的描述的同一件事情,就是指通過引入IOC容器,利用依賴關係注入的方式,實現對象之間的解耦。

三、通俗理解

1.什麼是依賴:

手機需要一個耳機,可以理解爲手機(當需要播放音樂時)依賴於耳機。

2.依賴注入的過程:

(1)將耳機插在手機上
(2)將耳機插在電腦上
依賴注入的本質應該是一次引用傳遞。

3.控制反轉:

原來硬盤與計算機主板耦合在一起使用(各個組件在機箱裏封裝着使用),由計算機主板掌握硬盤的控制權。
現在硬盤與計算機主板解耦合了(把機器拆開,各個組件拿出來拼着用了),由用戶掌握硬盤的控制權,計算機主板的控制權反過來也由別人(用戶、Ioc容器)掌控了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章