Spring IoC和DI

概念

IoC:Inversion of Control .控制反轉,是一種設計思想。spring中的實現爲 IoC容器,分爲兩個主要的容器系列,一個是實現BeanFactory接口的簡單容器系列,另外一個是實現ApplicationContext接口的高級容器系列。spring

DI:Dependency Injection。依賴注入。設計

對於像我同樣的初學者,老是對IoC和DI的概念有着模糊不清的認識。今天我就梳理一下個人理解,努力將這兩個概念描述清楚。對象

IOC

Q:控制反轉首先說的是什麼控制被反轉了?接口

A:控制反轉說的依賴對象的建立的控制權被反轉了,說了更細一點:傳統開發中,當咱們類的實例(對象)A裏面依賴另一個對象B的時候,咱們都是直接在實例A裏面new 一個對象B。這裏,咱們說對象A 是擁有對象B的建立控制權的。在Spring內,對象之間的這種相互依賴管理由IOC 容器進行管理,這裏,IOC容器控制了A依賴對象B的建立,因此說這裏控制權被反轉了。前面說過IOC容器是IOC這種設計思想的一種實現。開發

Q:這裏爲何用反轉 這兩個字來描述呢?io

A:我想,包括我在內的大多數初學者對於這裏爲何用「反轉」這兩個字來描述控制權的反轉深表疑惑。畢竟在咱們看來,並不像是控制權的反轉,而是控制權由本身交由第三方。容器

其實這裏說的反轉,咱們能夠從依賴對象的獲取方面來理解。傳統開發中,咱們的類的實例A都是主動的去建立依賴的對象B。引入IOC思想後,對象的建立交由IOC容器來管理,這時候,咱們的類的實例A被動的接受依賴的對象B。因此這樣看來,依賴對象的獲取確是被反轉了。依賴注入

DI

依賴注入講的是組件之間的依賴關係的容器動態注入。注入

IOC和DI的關係

控制反轉和依賴注入,實際上是同一個概念的不一樣角度的描述。控制反轉從依賴對象建立這個角度進行描述,依賴注入從依賴關係的角度進行描述。你們也沒必須拘泥於這兩個概念細節上死死拔不出來。這種概念上的理解並無什麼標準答案,只要你們理解到位便可。初學者

相關文章
相關標籤/搜索