2. IOC

  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>

posted on 2014-07-01 15:06  飞机说之代码也疯狂  阅读(276)  评论(0编辑  收藏  举报