给你什么就吃什么--IOC容器

来源:互联网 发布:fifaonline3数据库最新 编辑:程序博客网 时间:2024/04/19 04:02

一个只吃肉的小孩,对肉的依赖非常强,为了孩子的健康着想,母亲决定发挥强有力的控制能力。以后不能让孩子决定吃什么,而是母亲决定孩子吃什么。慢慢地,孩子不再对肉有很强的依赖,慢慢地变得健康。母亲成功地获得了控制权,并将孩子对蔬菜的依赖关系注入到孩子和蔬菜之间。

 

  IOC容器就像我们炒菜时用到的调味盒,炒菜过程中用到的油盐酱醋,调味盒都已经帮你准备好,当你需要的时候,调味盒就会提供给你。

 

 

  在程序运行过程中,当A对象完成一项功能过程中,需要调用B对象,那么就说A->BA依赖于B)。代码中一个复杂的业务逻辑,必定存在大量的依赖关系。A->B,B->C,C->D(A依赖B,B又依赖C,C又依赖D)这种复杂的依赖关系,使得代码维护和实现都很困难,那么有没有一种可能A,BC,D,均各自实现自己的业务逻辑,不考虑这种依赖关系,这种关系交给另一方管理。IOC很好的实现了这一点, 对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象AIOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。

  在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。IOC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。

  定义:IOC(Inversion of Control)控制反转的实现的基本思想是DI依赖注入(Dependency Injection):依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

以电脑通过USB接口读取数据和电脑读取本地硬盘数据的区别为例分析。

  1. 在没有USB接口前,电脑对内置硬盘有很强的依赖关系,而且这种关系是写死的,控制权掌握在电脑本身。
  1. 在有了USB接口后,电脑通过USB接口对外部存储设备的依赖关系,完全交给用户管理了,控制权也在用户手中,用户无论通过USB接口连接了什么(手机,移动硬盘,U盘),电脑都能成功地读取数据。这就是常说的控制反转的意义。控制反转实现的基本思想是依赖注入,电脑通过移动设备读取数据的过程,是用户将电脑对外部设备的依赖关系,通过USB接口注入到两者之间的。

IOC生成对象的最好的方式就是反射,Spring最核心的思想是IOC,IOC+反射能够成功地实现依赖注入。

ITOO高校云平台系统中:

在第一版高校云平台的服务端框架中运用了大量的工厂和反射,来实现BD层的依赖关系和WCF,B层的依赖关系。在第二版的服务框架中,去除了工厂,引用了spring,将各层的依赖关系交给了IOC容器。

  <spring>    <context>      <!--<resourceuri="assembly://SpringLover/SpringLover/Objects.xml"/>-->      <!--<resourceuri="~/Objects.xml"/>      <resourceuri="~/Objects02.xml"/>      <resourceuri="~/objects.xml"/>      <resourceuri="file://objects.xml"/>-->      <resourceuri="config://spring/objects" />    </context>    <objectsxmlns="http://www.springframework.net">     <objectid="BasicRoomBLL"type="ITOO.BasicPlace.BLL.BasicRoomBll,ITOO.BasicPlace.BLL"singleton="false" />      <!--B层的的注解-->    </objects>  </spring>


 

调用类的过程

 

        

/// <summary>        /// 调用B层的-建筑类型        /// </summary>        IBuildingTypeBll BuildingTypeBLL =SpringHelper.GetObject<IBuildingTypeBll>("BasicBuildingTypeBLL");

 

希望每个小孩,都能将自己应该吃什么这种控制权交给母亲。

0 0