DI的全稱是Dependency Injection,中文稱之為依賴注入。它與控制反轉(IoC)的含義相同,只不過這兩個稱呼是從兩個角度描述的同一個概念。對於一個Spring初學者來說,這兩種稱呼很難理解,下面我們將透過簡單的語言來描述這兩個概念。
當某個Java物件(呼叫者)需要呼叫另一個Java物件(被呼叫者,即被依賴物件)時,在傳統模式下,呼叫者通常會採用“new 被呼叫者”的程式碼方式來建立物件,如圖1所示。這種方式會導致呼叫者與被呼叫者之間的耦合性增加,不利於後期專案的升級和維護。
圖1 呼叫者建立被呼叫者物件
在使用Spring框架之後,物件的例項不再由呼叫者來建立,而是由Spring容器來建立,Spring容器會負責控制程式之間的關係,而不是由呼叫者的程式程式碼直接控制。這樣,控制權由應用程式碼轉移到了Spring容器,控制權發生了反轉,這就是Spring的控制反轉。
從Spring容器的角度來看,Spring容器負責將被依賴物件賦值給呼叫者的成員變數,這相當於為呼叫者注入了它依賴的例項,這就是Spring的依賴注入,如圖2所示。
圖2 將被呼叫者物件注入呼叫者物件
課程推薦: