IOC(Inversion of Control,控制反转):所谓控制反转,就是将实例化对象的权利交给Spring容器 .另外一点,Spring主张面向接口编程,这样就是一种松耦合性编程体现.
假设现在有Profession这样一个接口,在其下可以有Programmer,Art,Marketing等等一系列的实现类. 如果现在一个Service当中对其进行引用而且不用这种控制反转的思想的话:
class Service {
Profession p=new Programmer();
}
这样一个这样的Profession只能接收一个具体的实现. 这样的话这个Service就对这个具体的Programmer产生了强烈的依赖性,如果后期我要用到另一个实现Marketing时,这是只能更改代码.如果使用了控制反转的话:
class Service {
Profession p;
}
仅仅这样就够了,剩下的对象的实例化和对象关系的确定,都是由Spring容器进行管理的.这样就减小了类与类之间的耦合度 . 具体的做法就是在xml文件对这种关系进行配置.对于bean的配置用的是标签<bean>,对于简单的属性用的是<property>.
<bean id="pro1" class="feijishuo.test.ioc.Programmer">
<property name="instrument" value="computer" />
</bean>
这样就配置了一个具有一台电脑的一个程序员.
这名程序要在一个平台上才能展现自己,因此将其放到Service平台上让其尽情的施展自己的才能.一个Bean对另一个Bean进行引用用ref.
<bean id="service" class="feijishuo.test.ioc.Service">
<property name="company" value="Game Company" />
<property name="pro1" ref="pro1" />
</bean>
对于一个游戏公司而言不可能只有程序员,还得有Art,Marketing等等. Spring在装配集合类型时提供了list,set,map,props .
<list>和<set>当属性是array或者是一些java.util.Collection时候非常有用.
<map>和<props>,对应的是java.util.Map和java.util.Properties. 两者唯一的不同就是<props>要求键值都是String.<map>则没有要求.
<bean id="service" class="feijishuo.test.ioc.Service">
<property name="company" value="Game Company" />
<list>
<ref bean="art" />
<ref bean="programmer" />
<ref bean="marketing" />
</list>
</bean>
现在对这个游戏公司的各个部门进行介绍:
<bean id="service" class="feijishuo.test.ioc.Service">
<property name="company" value="Game Company" />
<map>
<entry key="program" value-ref="click" />
<entry key="art" value-ref="pic" />
<entry key="market" value-ref="talk" />
</map>
</bean>
原文地址:http://www.cnblogs.com/feijishuo/p/3818402.html