W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
“依賴注入(DI)”有時(shí)候也被稱為“控制反轉(zhuǎn)(IoC)”本質(zhì)上它們是同一個(gè)概念。具體是指,當(dāng)某個(gè)類調(diào)用另外一個(gè)類的時(shí)候通常需要調(diào)用者來創(chuàng)建被調(diào)用者。但在控制反轉(zhuǎn)的情況下調(diào)用者不在主動(dòng)創(chuàng)建被調(diào)用者,而是改為由容器注入,因此而得名。這里的“創(chuàng)建”強(qiáng)調(diào)的是調(diào)用者的主動(dòng)性。而依賴注入則不在需要調(diào)用者主動(dòng)創(chuàng)建被調(diào)用者。舉個(gè)例子通常情況下調(diào)用者(ClassA),會(huì)先創(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)事先并不知道要?jiǎng)?chuàng)建哪個(gè)被調(diào)用 者(FunBean)。ClassA 調(diào)用的是被注入進(jìn)來的 FunBean,通常我們會(huì)為需要依賴注入的 對(duì)象留有 set 方法,在調(diào)用 callFoo 方法之前是需要先將 funBean 對(duì)象通過 setFunBean 方法設(shè)置進(jìn)來的。例如:
public class ClassA {
private FunBean funBean = null;
public void setFunBean(FunBean funBean) {
this.funBean = funBean;
}
public void callFoo() {
this.funBean.foo();
}
}
public class FunBean {
......
}
嚴(yán)格意義上來說注入的形式分為兩種,它們是“構(gòu)造方法注入”和“set 屬性注入”。我們經(jīng)常聽到有第三種注入方式叫“接口注入”。其實(shí)它只是“set 屬性注入”的一種接口 表現(xiàn)形式。
這種方式是指被注入的對(duì)象通過構(gòu)造方法傳入,例如下面代碼:
public class ClassA {
private FunBean funBean = null;
public ClassA(FunBean funBean) {
this.funBean = funBean;
}
public void callFoo() {
this.funBean.foo();
}
}
是指被注入的對(duì)象通過其 get/set 讀寫屬性方法注入進(jìn)來,例如:
public class ClassA {
private FunBean funBean = null;
public void setFunBean(FunBean funBean) {
this.funBean = funBean;
}
public void callFoo() {
this.funBean.foo();
}
}
是指通過某個(gè)接口的 set 屬性方法來注入,大家可以看到其本質(zhì)還是 set 屬性注入。只不過調(diào)用者(ClassA),需要實(shí)現(xiàn)某個(gè)注入接口。
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 的依賴如何幫助你進(jìn)行快速開發(fā)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: