内容摘要:本文使用幽默的说法来解释什么是IoC,它们之间的认识方式,简明易懂。假设我们要设计一个Girl和一个Boy类,其中Girl有kiss方法,即Girl想要Kiss一个Boy。那么,我们的问题是,Girl如何能够认识这个Boy?
另外,J2EE中从Context取得对象也属于type1。
它依赖于配置文件
<container>
<componentname=“kissable“class=“Boy">
<configuration>…</configuration>
</component>
<componentname=“girl"class=“Girl"/>
</container>
IOCtype2:
publicclassGirl{
privateKissablekissable;
publicvoidsetKissable(Kissablekissable){
this.kissable=kissable;
}
publicvoidkissYourKissable(){
kissable.kiss();
}
}
Type2出现于SpringFramework,是通过JavaBean的set方法来将需要的Boy传递给Girl。它必须依赖于配置文件。
<beans>
<beanid=“boy"class=“Boy"/>
<beanid=“girl“class=“Girl">
<propertyname=“kissable">
<refbean=“boy"/>
</property>
</bean>
</beans>
IOCtype3
publicclassGirl{
privateKissablekissable;
publicGirl(Kissablekissable){
this.kissable=kissable;
}
publicvoidkissYourKissable(){
kissable.kiss();
}
}
这就是PicoContainer的组件。通过构造函数传递Boy给Girl。
PicoContainercontainer=newDefaultPicoContainer();
container.registerComponentImplementation(Boy.class);
container.registerComponentImplementation(Girl.class);
Girlgirl=(Girl)container.getComponentInstance(Girl.class);
girl.kissYourKissable();
来源:Java研究组织 责编:豆豆技术应用