1. 程式人生 > >IoC和DI的理解

IoC和DI的理解

在之前的學習中,一直認為IOC和DI是一個概念,很多文章只是提到ioc和di是在從不同的角度來描述。而實際上兩者根本不是同一個東西。
控制反轉是依賴倒置原則的一種程式碼設計的思路。具體採用的方法就是所謂的依賴注入。
概念關係
圍繞這張圖簡單說明一下

依賴倒置原則

  • 高層模組不應該依賴於底層模組,二者都依賴於抽象。
  • 抽象不應該依賴於細節,細節應該依賴於物件。

IoC(inversion of control)

IoC不是技術,而是以一種面向物件程式設計中的設計原則。IoC的思想中,物件的獲取不再是主動的去建立,而是有一個IoC容器來建立和管理物件,我們只是在被動的接收。

哪些方面被控制反轉了呢?依賴物件的獲取。 --百度百科

向百科中說的一樣,是依賴物件的獲取的控制權被反轉了,以前我們總是自己主動的獲取物件,這樣導致了很多耦合。而現在由Ioc的容器幫我們建立物件,我們只是被動的獲取。

DI(Dependency injection)

依賴注入,即實現Ioc的一種方式,除了依賴注入之外,依賴查詢可以實現Ioc(EJB就是使用這種方式)。元件中不再去主動的獲取它需要的物件,只提供普通方法,讓IoC容器去決定依賴關係,建立,組裝。

可以看到,IoC是根據依賴倒置的原則在實現解耦,讓我們不在關注物件的依賴關係、獲取。Ioc確實在可以看做工廠模式的一種昇華,以前在工廠模式中是寫死的物件並沒有完全解耦,現在改為了配置XML的形式,把工廠和要生產的物件隔離了,實現了完全解耦。