天天看點

【Spring揭秘】Spring IOC基本概念

IOC基本概念

IOC概念

IOC(Inversion of Control),即控制反轉(或依賴注入)

IOC理念

讓别人為你服務。(簡單來說就是從自己主動去擷取依賴變為依賴自動裝配完成)

IOC依賴注入方式

  1. 構造方法注入(常用)

IOC Service Provider 會去掃描對象的構造方法,将構造方法中聲明的對象進行注入

public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister){
    this.newsListener = newsListner;
    this.newPersistener = newsPersister;
}
           
  1. setter方法注入(常用)

可以通過調用 setNewsListener 和 setNewPersistener 方法為 FXNewsProvider 對

象注入所依賴的對象

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;
    }       
}
           
  1. 接口注入(基本廢棄)

這種注入方式基本已被廢棄,因為接口注入要求被注入對象必須實作一個接口,在接口中提供一個方法,方法參數即為要注入的依賴,實作方式比較繁瑣和死闆,對代碼的侵入性很強。

IOC Service Provider

IoC Service Provider 的職責

業務對象的建構管理

所有對象都交由Spring進行建立

業務對象間的依賴綁定。

将所建構對象的依賴對象自動注入,使所建構對象處于就緒、可被調用狀态。

IoC Service Provider如何管理對象間的依賴關系

直接編碼方式

IoContainer container = ...;
container.register(FXNewsProvider.class,new FXNewsProvider());
container.register(IFXNewsListener.class,new DowJonesNewsListener());
...
FXNewsProvider newsProvider = (FXNewsProvider)container.get(FXNewsProvider.class);
newProvider.getAndPersistNews();
           

配置檔案方式

<bean id="newsProvider" class="..FXNewsProvider">
    <property name="newsListener">
        <ref bean="djNewsListener"/>
    </property>
    <property name="newPersistener">
        <ref bean="djNewsPersister"/>
    </property>
</bean>
<bean id="djNewsListener" class="..impl.DowJonesNewsListener"></bean>
<bean id="djNewsPersister" class="..impl.DowJonesNewsPersister"></bean>