昨天學(xué)的反射,今天學(xué)習(xí)依賴注入湿镀。控制反轉(zhuǎn) IOC:利用了反射機(jī)制
依賴注入 DI:是 IOC 的一種形式伐憾,使類與類之間解耦勉痴。在spring框架中有大量的實(shí)例。 IOC是所有框架最基本的特征树肃,也是框架與普通類庫(kù)的最大不同蚀腿。
proxy模式
代理模式就是多一個(gè)代理類出來,替原對(duì)象進(jìn)行一些操作扫外,比如我們?cè)谧夥孔拥臅r(shí)候找中介莉钙。
public interface Sourceable {
public void method();
}
public class Source implements Sourceable{
@Override
public void method() {
System.out.println("the original method!");
}
}
public class Proxy implements Sourceable{
private Source source;
public Proxy(){
super();
this.source = new Source();
}
@Override
public void method() {
before();
source.method();
atfer();
}
private void atfer() {
System.out.println("after proxy!");
}
private void before() {
System.out.println("before proxy!");
}
}
測(cè)試類
public class ProxyTest {
public static void main(String[] args) {
Sourceable source = new Proxy();
source.method();
}
}
輸出:
before proxy!
the original method!
after proxy!
如果已有的方法在使用的時(shí)候需要對(duì)原有的方法進(jìn)行改進(jìn),此時(shí)有兩種辦法:
1筛谚、修改原有的方法來適應(yīng)磁玉。這樣違反了“對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉”的原則驾讲。
2蚊伞、就是采用一個(gè)代理類調(diào)用原有的方法,且對(duì)產(chǎn)生的結(jié)果進(jìn)行控制吮铭。這種方法就是代理模式时迫。
依賴注入
(Dependency Injection)是指將調(diào)用類接口實(shí)現(xiàn)類 的依賴關(guān)系由第三方注入,從而取消調(diào)用類對(duì)接口實(shí)現(xiàn)類的依賴谓晌。Spring使用DI來實(shí)現(xiàn)IoC功能掠拳。
- 接口注入。在接口定義要注入的信息纸肉,并通過接口來完成注入溺欧。Spring不支持。
- 設(shè)置注入柏肪。在要被注入的類中定義一個(gè)Setter()方法姐刁,并在參數(shù)中定義需要注入的對(duì)象。
- 構(gòu)造注入烦味。在要被注入的類中聲明一個(gè)構(gòu)造方法聂使,并在此方法的參數(shù)中定義要注入的對(duì)象
設(shè)置注入和構(gòu)造和構(gòu)造注入的區(qū)別在與Spring實(shí)例化對(duì)象的順序不同,即構(gòu)造注入實(shí)例化所有依賴對(duì)象,然后實(shí)例化自己柏靶;而設(shè)置注入首先實(shí)例化自己弃理,然后在實(shí)例化依賴對(duì)象。
IoC
(inverse of control 宿礁,控制反轉(zhuǎn))案铺,是spring容器的內(nèi)核蔬芥,其他功能都構(gòu)建在此基礎(chǔ)之上梆靖。某一接口的具體實(shí)現(xiàn)類的選擇控制權(quán)從調(diào)用者手中移除,轉(zhuǎn)交給了第三者控制笔诵。