spring里的依赖注入方式(设值注入)
spring里的依赖注入模式(设值注入)
“控制反转”( Inversion of Control,IoC)一个大家都很熟悉的名词,而其大而化之的名字却很容易为它的神秘增加一道朦胧的面纱.为了更能描述其特点,于是诞生——“依赖注入”(Dependency Injection),
依赖注入模式主要分为:设置注入,构造子注入和接口注入.
本文只讲述设置注入.
每一个男孩都具有亲吻别人的能力.而且他们都想亲吻女孩.
每一个女孩可以选择由那位男生亲吻她,但是却不告诉别人到底由谁来亲吻她.
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(); } }