锁定老帖子 主题:spring里的依赖注入模式(设值注入)
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-29
依赖注入模式主要分为:设置注入,构造子注入和接口注入. 本文只讲述设置注入. 每一个男孩都具有亲吻别人的能力.而且他们都想亲吻女孩. 每一个女孩可以选择由那位男生亲吻她,但是却不告诉别人到底由谁来亲吻她. public interface Kissable { void kiss( Object kisser); } public class Boy implements Kissable { public void kiss( Object kisser) { System.out.println("I was kissed by " + kisser); } } public class Girl { private Kissable kissable; public Kissable getKissable() { return kissable; } public void setKissable( Kissable kissable) { this.kissable = kissable; } public void kissSomeone() { kissable.kiss(this); } } 于是女孩用写信的方式来告诉别人她希望谁来亲吻她. 下面的spring.xml告诉别人女孩希望boy来亲吻她. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="girl" class="com.ftf.pattern.dependencyInjection.setter.Girl"> <property name="kissable"> <ref local="boy" /> </property> </bean> <bean id="boy" class="com.ftf.pattern.dependencyInjection.constructor.Boy"> </bean> </beans> 故事结束了,那么我们再看看这段测试代码: public class InterfacesTestCase extends TestCase { public void testKissing() { ApplicationContext ctx = new FileSystemXmlApplicationContext("bin/spring.xml"); Girl girl = (Girl)ctx.getBean("girl"); girl.kissSomeone(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-29
我记得这是网上最早的一个关于picocontainer例子吧,Kissable,Boy,Girl的类都一模一样的......
|
|
返回顶楼 | |
发表时间:2006-11-29
不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?
|
|
返回顶楼 | |
发表时间:2006-11-29
lighter 写道 我记得这是网上最早的一个关于picocontainer例子吧,Kissable,Boy,Girl的类都一模一样的......
Kissable,Boy,Girl对象是picocontainer的例子,但是picocontainer是构造子注入容器!我写的是设置注入. |
|
返回顶楼 | |
发表时间:2006-11-29
foxty 写道 不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?
恩,如果用set方法把对象注入进去是这样 Girl gril = new Girl(); gril.setKissable(new Boy()); gril.kissSomeone(); 的确很简单,但是如果这个女孩不想亲吻这个男孩,想亲吻另外一个男孩,是不是得修改这段代码? 如果修改这段代码,那么符不符合设计模式中的开闭原则呢? |
|
返回顶楼 | |
发表时间:2006-11-29
fantasy 写道 foxty 写道 不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?
恩,如果用set方法把对象注入进去是这样 Girl gril = new Girl(); gril.setKissable(new Boy()); gril.kissSomeone(); 的确很简单,但是如果这个女孩不想亲吻这个男孩,想亲吻另外一个男孩,是不是得修改这段代码? 如果修改这段代码,那么符不符合设计模式中的开闭原则呢? foxty说你把简单问题复杂化了.... 而且你说的也不是很清楚 如果想研究就用很清楚的例子&清晰的解释 |
|
返回顶楼 | |
发表时间:2006-11-29
fantasy 写道 foxty 写道 不就是通过类的set方法将其他对象注入进去,这么简单的一个概念,有必要搞的这么麻烦么?
恩,如果用set方法把对象注入进去是这样 Girl gril = new Girl(); gril.setKissable(new Boy()); gril.kissSomeone(); 的确很简单,但是如果这个女孩不想亲吻这个男孩,想亲吻另外一个男孩,是不是得修改这段代码? 如果修改这段代码,那么符不符合设计模式中的开闭原则呢? 我说的意思是,spring的set注入,就是将手工的set转换成了配置,一个很简单明了的概念,没有必要搞的这么复杂而已. |
|
返回顶楼 | |
发表时间:2006-11-30
恩,的确解释的不是很清楚!但是只是想演示下spring里的设值注入。如果有更为简单的设置注入方法,还望赐教!
|
|
返回顶楼 | |
发表时间:2006-11-30
想像一下xml变成java是什么样子就清楚了...
目的是为了像积木一样把东西垒起来 而没有什么高深的东东... |
|
返回顶楼 | |
发表时间:2006-11-30
pico container文档的最前面的例子,还比较好玩,嘿嘿.
|
|
返回顶楼 | |