酷播亮新聞
最棒的知識補給站

Spring4的IoC和DI的區別

一、IoC(Inversion of Control): 控制反轉(不是技術,而是思想)

其思想是反轉資源獲取的方向。IoC容器幫對象找相應的依賴對象並注入,而不是由對象主動去找。

傳統的資源查找要求組件向發起請求查找資源,作為回應,容器適時的返回資源,而應用了IoC之後,則是容器主動將資源推送給它所管理的組件,組件所要做的僅是選擇一種合適的方式來接受資源,這種行為也被稱為查找的被動形式。

Ioc意味著將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制。

理解好IoC的關鍵是:誰控制誰,控制什麼了,為何是反轉,在哪些方面反轉了。

1.誰控制誰,控制什麼。

傳統JavaSE程序設計,我們在對象內部直接通過new進行創建對象,是程序主動去創建依賴對象,而IoC有一個專門的容器來創建這些對象,即由IoC容器來創建這些對象的創建。誰控制誰?當然是由IoC容器控制了對象;控制了什麼?那就主要是控制了外部資源獲取(包括對象、文件等)。

2.為何是反轉,在哪些方面反轉了。

有反轉就有正轉。傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉。而反轉則是由容器來幫忙創建及注入依賴對象。為何是反轉?因為容器幫我們查找和注入依賴對象,對象只是被動的接受依賴對象,所以是反轉。哪些方面反轉了?依賴對象的獲取反轉了。

二、DI(Dependency Injection)依賴注入

IoC的另一種表述方式:即組件以一些預先定義好的方式(如:setter方法)接受來自容器的資源注入。相對於IoC而言,這種表述更為直接。

組件之間依賴關係由容器在運行期決定。形象的說,即由容器動態的將某個依賴關係注入到組件之中。依賴注入的目的並非為軟體系統帶來更多功能,而是為了提升組件重用的頻率,並為系統搭建一個靈活、可擴展的平台。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關係具體的資源來自何處,由誰實現。

理解DI的關鍵:誰依賴誰,為什麼需要依賴,誰注入誰,注入了什麼

1.誰依賴誰?當然是應用程序依賴於IoC容器。

2.為什麼需要依賴?應用程序需要IoC容器來提供對象需要的外部資源(包括對象,文件等)。

3.誰注入誰?很明顯是IoC容器注入應用程序某個對象,應用程序依賴的對象。

4.注入了什麼?就是注入某個對象所需要的外部資源(包括對象、資源、變數數據)

三、關係

IoC和DI是同一個概念的不同角度的描述,由於控制反轉概念比較含糊(可能只是理解為容器控制對象這一層面,很難讓人想到誰來維護對象關係),所以2004年大師級人物Martin Fowler又給出了一個新的名字:「依賴注入」,相對IoC 而言,「依賴注入」明確描述了「被注入對象依賴IoC容器配置依賴對象」。

Spring4的IoC和DI的區別

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:
如有侵權請來信告知:酷播亮新聞 » Spring4的IoC和DI的區別