第五節(jié) Hasor IoC

2018-09-28 15:14 更新

“依賴注入(DI)”有時候也被稱為“控制反轉(zhuǎn)(IoC)”本質(zhì)上它們是同一個概念。具體是指,當某個類調(diào)用另外一個類的時候通常需要調(diào)用者來創(chuàng)建被調(diào)用者。但在控制反轉(zhuǎn)的情況下調(diào)用者不在主動創(chuàng)建被調(diào)用者,而是改為由容器注入,因此而得名。這里的“創(chuàng)建”強調(diào)的是調(diào)用者的主動性。而依賴注入則不在需要調(diào)用者主動創(chuàng)建被調(diào)用者。舉個例子通常情況下調(diào)用者(ClassA),會先創(chuàng)建好被調(diào)用者(FunBean),然后在調(diào)用方法callFoo中調(diào)用被調(diào)用者(FunBean)的foo方法:

public class ClassA {
    private FunBean funBean = new FunBean();
    public void callFoo() {
        this.funBean.foo();
    }
}
public class FunBean {
    public void foo() {
        System.out.println("say ...");
    }
}


使用了依賴注入的情況恰恰相反,調(diào)用者(ClassA)事先并不知道要創(chuàng)建哪個被調(diào)用 者(FunBean)。ClassA 調(diào)用的是被注入進來的 FunBean,通常我們會為需要依賴注入的 對象留有 set 方法,在調(diào)用 callFoo 方法之前是需要先將 funBean 對象通過 setFunBean 方法設(shè)置進來的。例如:

public class ClassA {
    private FunBean funBean = null;
    public void setFunBean(FunBean funBean) {
        this.funBean = funBean;
    }
    public void callFoo() {
        this.funBean.foo();
    }
}
public class FunBean {
    ......
}




嚴格意義上來說注入的形式分為兩種,它們是“構(gòu)造方法注入”和“set 屬性注入”。我們經(jīng)常聽到有第三種注入方式叫“接口注入”。其實它只是“set 屬性注入”的一種接口 表現(xiàn)形式。


A.構(gòu)造方法注入


這種方式是指被注入的對象通過構(gòu)造方法傳入,例如下面代碼:

public class ClassA {
    private FunBean funBean = null;
    public ClassA(FunBean funBean) {
        this.funBean = funBean;
    }
    public void callFoo() {
        this.funBean.foo();
    }
}


B.set 屬性注入


是指被注入的對象通過其 get/set 讀寫屬性方法注入進來,例如:

public class ClassA {
    private FunBean funBean = null;
    public void setFunBean(FunBean funBean) {
        this.funBean = funBean;
    }
    public void callFoo() {
        this.funBean.foo();
    }
}


C.接口注入


是指通過某個接口的 set 屬性方法來注入,大家可以看到其本質(zhì)還是 set 屬性注入。只不過調(diào)用者(ClassA),需要實現(xiàn)某個注入接口。

public interface IClassA {
    public void setFunBean(FunBean funBean);
}
public class ClassA implements IClassA {
    private FunBean funBean = null;
    public void setFunBean(FunBean funBean) {
        this.funBean = funBean;
    }
    public void callFoo() {
        this.funBean.foo();
    }
}


上面我們講解了什么是依賴注入,并且舉例了一些依賴注入的表現(xiàn)形式?,F(xiàn)在我們來看看 Hasor 的依賴如何幫助你進行快速開發(fā)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號