1、Ioc
Ioc: inversion of control,中文通常翻译为“控制反转”,还要一个别名叫做依赖注入(Dependency Injection),简单点说,Ioc的理念就是,让别人为你服务!
image.png
使用Ico之前,被注入对象与被依赖对象是直接打交道的,使用了Ioc后,二者通过Ioc Service Provider来打交道,所有的被注入对象和依赖对象都有Ioc Service Provider统一管理。被注入对象需要什么,直接跟Ioc Provider招呼一声即可。
2、Ioc Provider 如何提供服务
有三种依赖注入的方式,分别为构造方法注入(constructor injection),setter方法注入(setter injection),以及接口注入(interface injection)
构造方法注入
构造方法注入,就是被注入对象可以通过在其构造方法中声明被依赖对象的参数列表,让外部(通常是Ioc 容器)知道他需要依赖哪些依赖对象
public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister){
this.newsListener = newsListner;
this.newPersistener = newsPersister;
}
这样Ioc容器在初始化FXNewsProvider时,就可以检查依赖对象列表,进而为其注入对象
setter方法注入
对于JavaBean对象,可以使用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会通过这个接口为其注入对象,
image.png
3、三种注入方式比较
- 接口注入
不提倡,带有侵入性, - 构造方法注入
优点是,对象在构造完之后,就已经进入就绪状态。 - setter方法注入
缺点就是对象无法在构造完成后马上进入就绪状态
构造方法注入和setter方法注入因为其侵入性较弱,且易于理解和使用,所以是现在使用最多的注入方式;而接口注入因为侵入性较强,近年来已经不流行了。
网友评论