Spring 控制反转

来源:互联网 发布:开博尔网络机顶盒价格 编辑:程序博客网 时间:2024/05/29 11:50
        控制反转是一种降低对象之间耦合关系的方法。其核心是在IOC的作用下改变以往的上层调用下层接口,调用者依赖被调用者的情况,通过注入一个实例化对象的方式避免对象的显示调用,实现调用者决定被调用者,从而完成控制反转。

       IOC机制能够提高系统可扩展性,仅以工厂模式为例。假设需要生产绿茶和红茶,对其进行管理。开始阶段只生产绿茶和红茶两种产品。为了满足系统的可扩展性采用了工厂方法模式。创建了抽象Abstraction对类进行管理。利用工厂类中的gettea方法创建调用对象。当需要替换产品时只需改动工厂类中的方法以此达到对扩展性的要求。
  

       使用了工厂模式能够把程序中可变的部分转移到工厂中进行实现但是在需要出现很多类的时候就需要频繁更改工厂中的代码。违反开闭原则。这是可以用IOC解决这一问题。

       所谓的IOC实现就是在调用者和工厂之间加入IOC部分。

  
       spring容器根据配置文件来创建调用者对象,把被调用者对象的实例化对象通过构造函数或set方法的形式注入到调用者对象中。


   配置文件:
     
 <beans>        <beans id="sale"  class="Sale" single="false">          <constructor-arg>             <ref bean="tea"/>          </constructor-arg>                <bean id="tea" class="BlueTea" singleton="false">            </beans>

sale类
       
 class sale{          private Abstraction          public Sale(Abstraction t){            this.t=t          }                  }  




    此时spring容器创建Sale对象,根据配置文件就会创建一个BlueTea的对象,作为sale构造函数的参数。需要变动时只需更改配置文件即可。


    创建sale对象:

     
ApplicationContext xtx = new FileSystemXMLApplicationContext("配置文件名称");     Sale s =(Sale)ctx.getBean("sale");



   优点:不需关注对象创建过程;便于单元测试
   缺点:反射机制影响性能;创建对象的流程变复杂。
0 0
原创粉丝点击