1、Ioc
Ioc: inversion of control,中文通常翻譯為“控制反轉(zhuǎn)”,還要一個(gè)別名叫做依賴注入(Dependency Injection),簡(jiǎn)單點(diǎn)說(shuō),Ioc的理念就是,讓別人為你服務(wù)!

使用Ico之前,被注入對(duì)象與被依賴對(duì)象是直接打交道的,使用了Ioc后,二者通過(guò)Ioc Service Provider來(lái)打交道,所有的被注入對(duì)象和依賴對(duì)象都有Ioc Service Provider統(tǒng)一管理。被注入對(duì)象需要什么,直接跟Ioc Provider招呼一聲即可。
2、Ioc Provider 如何提供服務(wù)
有三種依賴注入的方式,分別為構(gòu)造方法注入(constructor injection),setter方法注入(setter injection),以及接口注入(interface injection)
構(gòu)造方法注入
構(gòu)造方法注入,就是被注入對(duì)象可以通過(guò)在其構(gòu)造方法中聲明被依賴對(duì)象的參數(shù)列表,讓外部(通常是Ioc 容器)知道他需要依賴哪些依賴對(duì)象
public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister){
this.newsListener = newsListner;
this.newPersistener = newsPersister;
}
這樣Ioc容器在初始化FXNewsProvider時(shí),就可以檢查依賴對(duì)象列表,進(jìn)而為其注入對(duì)象
setter方法注入
對(duì)于JavaBean對(duì)象,可以使用setter方法更改相應(yīng)的對(duì)象屬性,外界就可以使用setNewsListener和setNewPersistener方法為FXNewsProvider對(duì)
象注入所依賴的對(duì)象了
public class FXNewsProvider{
private IFXNewsListener newsListener;
private IFXNewsPersister newPersistener;
public IFXNewsListener getNewsListener() {
return newsListener;
}
public void setNewsListener(IFXNewsListener newsListener) {
this.newsListener = newsListener;
}
public IFXNewsPersister getNewPersistener() {
return newPersistener;
}
public void setNewPersistener(IFXNewsPersister newPersistener) {
this.newPersistener = newPersistener;
}
}
接口注入
被注入對(duì)象如果想要Ioc Service Provider 為其注入依賴對(duì)象,就必須實(shí)現(xiàn)某個(gè)接口,這個(gè)接口提供一個(gè)方法,用來(lái)為其注入依賴對(duì)象。Ioc Service Provider會(huì)通過(guò)這個(gè)接口為其注入對(duì)象,

3、三種注入方式比較
- 接口注入
不提倡,帶有侵入性, - 構(gòu)造方法注入
優(yōu)點(diǎn)是,對(duì)象在構(gòu)造完之后,就已經(jīng)進(jìn)入就緒狀態(tài)。 - setter方法注入
缺點(diǎn)就是對(duì)象無(wú)法在構(gòu)造完成后馬上進(jìn)入就緒狀態(tài)
構(gòu)造方法注入和setter方法注入因?yàn)槠淝秩胄暂^弱,且易于理解和使用,所以是現(xiàn)在使用最多的注入方式;而接口注入因?yàn)榍秩胄暂^強(qiáng),近年來(lái)已經(jīng)不流行了。