W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
“依賴注入(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)形式。
這種方式是指被注入的對象通過構(gòu)造方法傳入,例如下面代碼:
public class ClassA {
private FunBean funBean = null;
public ClassA(FunBean funBean) {
this.funBean = funBean;
}
public void callFoo() {
this.funBean.foo();
}
}
是指被注入的對象通過其 get/set 讀寫屬性方法注入進來,例如:
public class ClassA {
private FunBean funBean = null;
public void setFunBean(FunBean funBean) {
this.funBean = funBean;
}
public void callFoo() {
this.funBean.foo();
}
}
是指通過某個接口的 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ā)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: