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>