Spring Ioc Service Provider

1、Ioc

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


image.png

使用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ì)象,


image.png

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)不流行了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容