1. 程式人生 > 其它 >ioc和di的關係

ioc和di的關係

剛進入spring的時候,看見這兩個詞一陣迷茫,控制反轉不知道轉的是啥,依賴注入也不知道注入的啥。有的人說這兩個是一個,有的說di是ioc的實現,我就說說我的理解。

從getter和setter開始
從開始學習mvc設計模式,或者是jsp異或是框架,必然會有JavaBean或者其他類似的概念出現。getter和setter就是JavaBean中的重要部分,通過這種方式,不需要考慮依賴物件的建立過程,省去了內部出現new的情況,大大降低了耦合性。但是這種方式只是把底層的耦合性降低,依賴關係還是需要高層的Java程式將依賴物件注入。
所以不滿足的程式設計師提出了問題,耦合性的降低是否還可以更進一步?
所以就有了ioc和di的出現,很多框架甚至是所有的框架,都實現了ioc的功能 ,spring也不例外而ioc和di的概念也緊隨其後,做為spring的功能的解釋。
之前一直錯誤的以為ioc和di是因為spring才出現的,實則不然,spring是一個良好的嵌入這兩個功能的框架,但這兩個功能或者說是思想,是因為需求才出現的,而框架是這些優良思想的具體實現和整合。
ioc的出現


ioc,inverse of control,控制反轉。直接理解一下就是,將耦合關係的控制權力反轉,或者說是將依賴注入的權力反轉。本來依賴注入是誰控制的,Java類自己new物件。後來是高層物件建立後,用setter方法注入,而且還增加了高層物件對於依賴物件的維護。ioc的出現就極大的解決了這些問題,ioc容器接管了依賴注入的權力,全部由ioc容器來控制。這就是控制反轉,由應用程式控制反轉為ioc容器控制。其實,ioc的概念,已經不是僅僅程式的反轉控制了,而是完全的外部資源控制。
不過,還有一些問題
ioc的反轉控制沒錯,但它還內涵了依賴注入的意思。可是字面上並沒有體現,所以Martin Fowler 在2004年初的一篇論文中首次提出了di這一名詞。
di的出現

di,dependency injection,依賴注入。di就是在指ioc容器內實現的將依賴物件注入的概念。
而依賴注入這一概念的實現,必然也內涵著權力控制的條件,否則spring沒有基礎的控制權力,如何注入。
總結
ioc和di一個意思其實並沒有錯。ioc作為率先提出的概念內涵著一部分概念,不直接,有些難受,就提出了di。很有意思的是,他們都內涵著對方的意思。
當然如果你要是強制認為,ioc就是容器,di就是注入這一行為,那麼di確實就是ioc的具體功能的實現。而ioc則是di發揮的平臺和空間。
所以說,ioc和di即是相輔相成的搭檔,又是殊途同歸的雙胞胎。最重要的是,他們都是良好的降低耦合的思想。

  當然,隨著技術的發展,兩者的概念可能會越來越分離,各自形成一個獨立的體系。

————————————————
版權宣告:本文為CSDN博主「AStar3」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/astar3/article/details/80849233