IOC容器理解

1.IOC是什麼?編程

    IOC-Inversion of Control 即控制反轉它是一種設計思想,而不是一種技術。IOC使得你能夠將設計好的對象交給容器控制,而不是在類內部直接實例化。如何理解IOC容器呢?理解好IOC的關鍵是要明確「誰控制誰,控制什麼,爲何是反轉(有反轉就有正轉了),那些方面反轉了」,接下來咱們分析一下。測試

  •     誰控制誰,控制了什麼:在傳統的程序設計中,咱們在類內部直接使用new關鍵字實例化對象,是程序主動建立須要依賴的對象;而IOC是有一個專門的容器來建立這些對象,即IOC容器控制着這些對象的建立;誰控制誰?固然是IOC容器控制了對象;控制了什麼,那就是控制了外部資源獲取(不僅是對象還包括文件,字符串等);
  • 爲什麼反轉,哪方面反轉了:有反轉固然就有正轉了,在傳統程序中是有咱們在類中主動控制去直接獲取依賴的對象,也就是正轉。而反轉則是由IOC容器幫忙建立以及注入依賴對象;爲什麼反轉,由於容器幫咱們查找及注入依賴對象,類只能被動接受依賴對象,因此是反轉。哪方面反轉了,依賴對象的獲取被反轉了。

2.IOC能作什麼?spa

    IOC不是一種技術,是一種思想,一個面向對象編程的法則,它能指導咱們設計出鬆耦合,更優良的程序。傳統的應用程序是咱們在類內部主動建立依賴對象,從而致使類與類之間的高耦合,難於測試。有了IOC容器後,把建立和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,因此對象之間是鬆耦合,這也方便測試,利於功能複用,更重要的是使得整個程序的整個體系變的很是靈活。設計

    其實IOC編程帶來的最大改變不是從代碼上,而是從思想上,發生了「主從換位」的變化。應用程序本來是老大,要獲取什麼資源都是主動獲取的,可是在IOC/DI思想中,應用程序變成了被動的了。被動的等待IOC容器來建立並注入它所需的資源。對象

    IOC很好的體現了面向對象設計法則之一-----好萊塢法則:「別來找咱們,咱們找你」即IOC幫對象找到相應的依賴並注入。資源

3.IOC和DI字符串

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

    理解DI的關鍵是:「誰依賴誰,爲何須要依賴,誰注入了誰,注入了什麼」,那咱們來深刻分析一下。面向對象編程

  • 誰依賴誰:固然是程序依賴於IOC容器。
  • 爲何須要依賴:應用程序須要IOC容器來提對象須要的外部資源。
  • 誰注入誰:很明顯高是IOC容器注入應用程序某個對象,應用程序依賴的對象。
  • 注入了什麼:就是注入了某個對象須要的外部資源(包括對象,資源,常量數據)。

    IOC和DI有什麼關係呢?其實他們是同一個概念不一樣角度的描述,因爲控制反轉概念比較含糊(可能只理解爲容器控制對象這一個層面,很難讓人想到由誰來維護對象關係)因此2004年大師級人物Martin Fowler又給出了一個新的名字--「依賴注入」,相對IOC而言「依賴注入」明確描述了 被注入對象依賴IOC容器。程序設計

相關文章
相關標籤/搜索