1.IOC是什麼?編程
IOC-Inversion of Control 即控制反轉它是一種設計思想,而不是一種技術。IOC使得你能夠將設計好的對象交給容器控制,而不是在類內部直接實例化。如何理解IOC容器呢?理解好IOC的關鍵是要明確「誰控制誰,控制什麼,爲何是反轉(有反轉就有正轉了),那些方面反轉了」,接下來咱們分析一下。測試
2.IOC能作什麼?spa
IOC不是一種技術,是一種思想,一個面向對象編程的法則,它能指導咱們設計出鬆耦合,更優良的程序。傳統的應用程序是咱們在類內部主動建立依賴對象,從而致使類與類之間的高耦合,難於測試。有了IOC容器後,把建立和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,因此對象之間是鬆耦合,這也方便測試,利於功能複用,更重要的是使得整個程序的整個體系變的很是靈活。設計
其實IOC編程帶來的最大改變不是從代碼上,而是從思想上,發生了「主從換位」的變化。應用程序本來是老大,要獲取什麼資源都是主動獲取的,可是在IOC/DI思想中,應用程序變成了被動的了。被動的等待IOC容器來建立並注入它所需的資源。對象
IOC很好的體現了面向對象設計法則之一-----好萊塢法則:「別來找咱們,咱們找你」即IOC幫對象找到相應的依賴並注入。資源
3.IOC和DI字符串
DI--Dependency Injection ,即「依賴注入」:組件間的依賴關係,由容器在運行期決定,形象的說,即容器動態的將某個依賴注入到組件中。依賴注入的目的並不是爲軟件系統帶來更多的功能,而是爲了提高組件的重用頻率,並搭建一個靈活的可擴展的平臺。經過依賴注入機制,咱們只需經過簡單的配置,而無需任何代碼就可指定目標須要的資源,完成自身業務邏輯,而不須要關心具體資源來自何處,由誰實現。io
理解DI的關鍵是:「誰依賴誰,爲何須要依賴,誰注入了誰,注入了什麼」,那咱們來深刻分析一下。面向對象編程
IOC和DI有什麼關係呢?其實他們是同一個概念不一樣角度的描述,因爲控制反轉概念比較含糊(可能只理解爲容器控制對象這一個層面,很難讓人想到由誰來維護對象關係)因此2004年大師級人物Martin Fowler又給出了一個新的名字--「依賴注入」,相對IOC而言「依賴注入」明確描述了 被注入對象依賴IOC容器。程序設計