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