spring Ioc/DI的理解

學習spring的童鞋都知道,spring中有兩個很是重要的點,Ioc(控制反轉)與DI(依賴注入),對於初級玩家來講,這兩個概念可能有點模棱兩可的感受,今天就談下本身的一點理解,不足請多多指教!!! 本文人力資源局的例子只爲方便理解,無任何指向意義spring

 

 

1、Ioc是什麼?編程

  控制反轉(Inversion of Control,縮寫爲IoC),是面向對象編程中的一種設計原則,能夠用來減低計算機代碼之間的耦合度。其中最多見的方式叫作依賴注入(Dependency Injection,簡稱DI),還有一種方式叫「依賴查找」(Dependency Lookup)。經過控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用傳遞給它。也能夠說,依賴被注入到對象中。固然,這是百度說的,看了仍是不懂,so,複雜的東西簡單說架構

    控制反轉三個問題:一、誰控制誰;框架

           二、控制了什麼;學習

           三、怎麼就反轉了;spa

       第一個問題:誰控制誰,Ioc其實能夠把它當作一個容器,一個存儲對象的容器,咱們開發中的對象均可以交給spring Ioc容器作一個統一的規範管理,就好像是咱們每一個人都有本身的簡歷,所有交給人力資源局來管理,Ioc容器就充當一我的力資源局的角色;設計

       第二個問題:控制了什麼,既然咱們的開發之中的對象已經所有交由Ioc容器來管理了,那咱們在獲取對象的時候就得由Ioc容器來給咱們提供,那麼然Ioc容器也就控制了咱們實例對象的獲取權,就好像咱們要去取得一我的的檔案,就得由人力資源局提供,人力資源局控制了咱們檔案的提取;對象

  第三個問題:怎麼就反轉了,其實說白了就是一個控制權的反轉,比如咱們須要一個其餘人的檔案,咱們直接去找這我的家要過來,這個事情是咱們來作,控制權就在咱們手裏(程序過程就是classA須要一個classB的實例,就在A類中直接new 一個B的實例來使用),可是如今咱們不直接向這我的所要檔案了,咱們去向資源局去索要這我的的檔案,由人力局把檔案給咱們(程序過程就是classA須要classB的一個實例,而後告訴Ioc容器,我須要B的實例,你給我一個,而後容器把B的實例給classA),如今,弄檔案這個事情是資源局在作而不是咱們了,這個弄檔案的事情的控制權到了資源局手裏而非咱們本身去弄,Ioc的職責就像是資源局,咱們在使用spring框架開發時,就把咱們的對象交由spring Ioc容器來管理,咱們對實例對象的控制權利發生了一個反轉;資源

 

2、Ioc容器能幹什麼,爲何要把對象的控制權交給容器來管理?開發

  Ioc是一種設計思想,幫助咱們實現程序之間的解耦,設計出耦合性更低更優良的的程序,傳統的開發模式在程序類的內部主動的依賴對象(new Object)來實現注入,從而使的類之間高度耦合,有了Ioc容器以後,咱們能夠把對象的控制權交給容器,讓容器爲咱們建立管理對象,這樣,對象之間耦合度變低,程序的架構體系也會更加的靈活;

 

3、Ioc與DI

  看過不少的博客都把Ioc跟DI分開來講,我我的感受他們的緊密程度很是之大,像是一條工做鏈必不可少的部分,工做模式又是相輔相成;

       什麼是DI:依賴注入,在容器運行的時候,掃描全部的依賴關係,併爲之動態的注入對應的依賴關係,好比,咱們須要某人的檔案了,就給人力資源局發一個通知,告訴他我須要領取xxx的檔案,而後資源局就把檔案給你送過來,咱們領取檔案的過程就是DI(依賴注入)

  DI的幾個問題:1誰依賴誰

         二、誰注入了誰

         三、注入了什麼

   第一個問題:一、誰依賴誰,從咱們領取檔案的流程來看就知道咱們依賴於人力資源局,也就是說程序依賴於Ioc容器

   第二個問題:二、誰注入了誰,人力資源局把檔案給咱們,也就是說Ioc容器把對象注入了程序之中(這個過程就是依賴注入)

   第三個問題:三、注入了什麼,咱們向人力資源局要檔案而後給了咱們,就是容器把咱們依賴的對象注入了程序

  

  Ioc與DI的關係:他兩的關係就像是同一個問題的不一樣角度的描述,老是那麼的緊密相連,理解過上邊的天然內心就清晰了

 

 4、總結

   看到這裏,其實Ioc容器就是爲咱們提供一個公共的管理平臺,管理咱們對象之間的依賴關係,咱們須要什麼就向容器要,容器之中若是要就會給咱們,咱們拿過來直接用,而不用去考慮對象何時建立,何時銷燬,只管用就好了,是否是方便了不少

 

   以上就是我對Ioc跟DI的一些理解,不足之處多多指教!

相關文章
相關標籤/搜索