标签:ioc
一个只吃肉的小孩,对肉的依赖非常强,为了孩子的健康着想,母亲决定发挥强有力的控制能力。以后不能让孩子决定吃什么,而是母亲决定孩子吃什么。慢慢地,孩子不再对肉有很强的依赖,慢慢地变得健康。母亲成功地获得了控制权,并将孩子对蔬菜的依赖关系注入到孩子和蔬菜之间。
IOC容器就像我们炒菜时用到的调味盒,炒菜过程中用到的油盐酱醋,调味盒都已经帮你准备好,当你需要的时候,调味盒就会提供给你。
在程序运行过程中,当A对象完成一项功能过程中,需要调用B对象,那么就说A->B(A依赖于B)。代码中一个复杂的业务逻辑,必定存在大量的依赖关系。A->B,B->C,C->D(A依赖B,B又依赖C,C又依赖D)这种复杂的依赖关系,使得代码维护和实现都很困难,那么有没有一种可能A,B,C,D,均各自实现自己的业务逻辑,不考虑这种依赖关系,这种关系交给另一方管理。IOC很好的实现了这一点, 对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。
在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。IOC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。
定义:IOC(Inversion of Control)控制反转的实现的基本思想是DI依赖注入(Dependency Injection):依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
以电脑通过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");
希望每个小孩,都能将自己应该吃什么这种控制权交给母亲。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:ioc
原文地址:http://blog.csdn.net/tgbsqliuying/article/details/47125093