IOC基本概念
IOC概念
IOC(Inversion of Control),即控制反轉(或依賴注入)
IOC理念
讓别人為你服務。(簡單來說就是從自己主動去擷取依賴變為依賴自動裝配完成)
IOC依賴注入方式
- 構造方法注入(常用)
IOC Service Provider 會去掃描對象的構造方法,将構造方法中聲明的對象進行注入
public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister){
this.newsListener = newsListner;
this.newPersistener = newsPersister;
}
- 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;
}
}
- 接口注入(基本廢棄)
這種注入方式基本已被廢棄,因為接口注入要求被注入對象必須實作一個接口,在接口中提供一個方法,方法參數即為要注入的依賴,實作方式比較繁瑣和死闆,對代碼的侵入性很強。
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>