Spring的IOC容器

Adrian_Dai發表於2018-03-06



Ioc容器的大致圖示

 

 

IOC思想

IocInversion of Control,即“控制反轉”

IoC不是一種技術,只是一種思想,一個重要的物件導向程式設計的法則,它能指導我們如何設計出鬆耦合、更優良的程式。傳統應用程式都是由我們在類內部主動建立依賴物件,從而導致類與類之間高耦合,難於測試;有了IoC容器後,把建立和查詢依賴物件的控制權交給了容器,由容器進行注入組合物件,所以物件與物件之間是鬆散耦合,這樣也方便測試,利於功能複用,更重要的是使得程式的整個體系結構變得非常靈活。

其實IoC對程式設計帶來的最大改變不是從程式碼上,而是從思想上,發生了“主從換位”的變化。應用程式原本是老大,要獲取什麼資源都是主動出擊,但是在IoC/DI思想中,應用程式就變成被動的了,被動的等待IoC容器來建立並注入它所需要的資源了。

 

所謂IoC,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係。

 

 

DI依賴注入

DI—Dependency Injection,即依賴注入

是元件之間依賴關係由容器在執行期決定,形象的說,即由容器動態的將某個依賴關係注入到元件之中(動態的向某個物件提供它所需要的其他物件)。依賴注入的目的並非為軟體系統帶來更多功能,而是為了提升元件重用的頻率,併為系統搭建一個靈活、可擴充套件的平臺。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何程式碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。

 

理解DI的關鍵是:誰依賴誰,為什麼需要依賴,誰注入誰,注入了什麼,那我們來深入分析一下:

誰依賴於誰:當然是應用程式依賴於IoC容器;

為什麼需要依賴:應用程式需要IoC容器來提供物件需要的外部資源;

誰注入誰:很明顯是IoC容器注入應用程式某個物件,應用程式依賴的物件;

注入了什麼:就是注入某個物件所需要的外部資源(包括物件、資源、常量資料)。

 

 

注入的方法分類

 

建構函式注入:

通過呼叫類的建構函式,將介面實現類通過建構函式變數傳入

 

 

public class MoAttack {  
   private GeLi geli;  
   //①注入革離的具體扮演者  
   public MoAttack(GeLi geli){   
       this.geli = geli;  
   }  
    public void cityGateAsk(){  
       geli.responseAsk("墨者革離!");  
   }  
} 

 

屬性注入:

屬性注入可以有選擇地通過Setter方法完成呼叫類所需依賴的注入,更加靈活方便

 

 

public class MoAttack {  
    private GeLi geli;  
     //①屬性注入方法  
    public void setGeli(GeLi geli) {    
        this.geli = geli;  
    }  
    public void cityGateAsk() {  
        geli.responseAsk("墨者革離");  
    }  
} 

 

介面注入:

將呼叫類所有依賴注入的方法抽取到一個介面中,呼叫類通過實現該介面提供相應的注入方法

public interface ActorArrangable {  
   void injectGeli(GeLi geli);  
}  
public class MoAttack implements ActorArrangable {  
    private GeLi geli;  
     //①實現介面方法  
    public void injectGeli (GeLi geli) {    
        this.geli = geli;         
    }  
    public void cityGateAsk() {  
        geli.responseAsk("墨者革離");  
    }  
}  

相關文章