天天看點

IOC控制反轉(依賴注入)

一。什麼叫控制反轉

IOC控制反轉(依賴注入)

MoAttack 墨攻劇本需要一個英雄,去喊話,“墨者革離”。這時候劇本就控制LiuDeHua(劉德華)去喊話。

這個演員不一定确定是劉德華,我們可能找其他人來喊話,但是這個人必須有一個功能喊話。是以我們定義了一個角色接口(GeLi)演員實作這個接口。

IOC控制反轉(依賴注入)

我們需要實作劇本隻是依賴角色。而不依賴演員。這個時候我們引入一個新的對象。導演

public MoAttack{
    private Geli geli;
    public void setGeli(Geli geli){
        this.geli = geli;
    } 
    public void cityGateAsk(){
        geli.responseAsk("墨者革離");
    }
}


----------
public interface GeLi{
    void responseAsk();
}
public Class LiuDeHua{
    public void responseAsk(){
        system.out.println("墨者革離");
    }
}
public Class Director{
    public static void main(string[] args){
        GeLi geli= new LiuDeHua();
        Moattack moattack = new Moattack();
        Moattack.setGeLi(geli);
        Moattack.cityGateAsk();
    }
}
           

這樣就講劇本和劉德華解耦了。可以安排不同的人來出演。

IOC控制反轉(依賴注入)

控制反轉的含義:某一接口具體實作類的選擇控制權,從調用類中移除,轉交給第三方決定. 控制反轉後來也叫依賴注入, 依賴注入:調用類對某一接口實作類的依賴關系有第三方(容器或者協助類)注入。

IOC依賴注入有三種方式。

  1. 構造函數注入
  2. 屬性注入
  3. 接口注入
public MoAttack{
    private Geli geli;
//  public void setGeli(Geli geli){
//      this.geli = geli;
//  } 
    public MoAttack(GeLi geli){
        this.geli = geli;
    }
    public void cityGateAsk(){
        geli.responseAsk("墨者革離");
    }
}
           

以上就是構造函數依賴注入,和屬性方法依賴注入的對比。

對于接口注入它的效果和屬性注入無本質差別,有點多次一舉的意思。

以上是協助類注入,還是自己寫代碼。但是我們的角色,導遊可能都是海選的,即角色不是由導演選擇,三者解耦。這時候就要用到容器了

spring就是這樣的一個容器。它通過配置檔案或者注解描述類與類之間的依賴關系,自動完成類的初始化和依賴注入的工作。

IOC控制反轉(依賴注入)

先執行個體化,然後依賴注入。

以上知識參考:精通spring4.x企業應用開發實戰等相關書籍。