IoC的类型指的是Girl得到Boy的几种不同方式。我们逐一来说明。
IOC type 0:不用IOC
public class Girl implements Servicable {
private Kissable kissable;
public Girl() {
kissable = new Boy();
}
public void kissYourKissable() {
kissable.kiss();
}
}
Girl自己建立自己的Boy,很难更换,很难共享给别人,只能单独使用,并负责完全的生命周期。
IOC type
1,先看代码:
public class Girl implements Servicable {
Kissable kissable;
public void service(ServiceManager mgr) {
kissable
= (Kissable) mgr.lookup(“kissable”);
}
public void kissYourKissable() {
kissable.kiss();
}
}
这种情况出现于Avalon
Framework。一个组件实现了Servicable接口,就必须实现service方法,并传入一个ServiceManager。其中会含有需要
的其它组件。只需要在service方法中初始化需要的Boy。另外,J2EE中从Context取得对象也属于type 1,它依赖于配置文件:
IOC
type 2:
public class Girl {
private Kissable kissable;
public void setKissable(Kissable kissable) {
this.kissable = kissable;
}
public void kissYourKissable() {
kissable.kiss();
}
}
Type 2出现于Spring
Framework,是通过JavaBean的set方法来将需要的Boy传递给Girl。它必须依赖于配置文件。
IOC type 3
public class Girl {
private Kissable kissable;
public Girl(Kissable kissable) {
this.kissable = kissable;
}
public void kissYourKissable() {
kissable.kiss();
}
}
这就是PicoContainer的组件 。通过构造函数传递Boy给Girl。
PicoContainer container = new DefaultPicoContainer();
container.registerComponentImplementation(Boy.class);
container.registerComponentImplementation(Girl.class);
Girl girl = (Girl) container.getComponentInstance(Girl.class);
girl.kissYourKissable();
本文详细介绍了IoC容器的四种类型,包括不使用IoC、通过ServiceManager获取依赖、使用JavaBean的set方法注入依赖以及通过构造函数传递依赖。每种类型都通过具体的代码示例进行了说明。
172

被折叠的 条评论
为什么被折叠?



