码迷,mamicode.com
首页 > 其他好文 > 详细

初识控制反转(IoC)

时间:2015-03-09 20:59:48      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

                                                                  技术分享

一、定义

 

         控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

         通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

 

二、原理

 

        IoC,直观地讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也

就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

       IoC体现了好莱坞原则,即“Don‘t call me , I‘ll call you ”。

 

三、技术描述

 

        Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。

        采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。

 

四、主要实现方式

 

1、依赖注入(Dependency Injection)

          组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。

2依赖查找(Dependency Lookup)

          依赖查找更加主动,在需要的时候通过调用框架提供的方法来获取对象,获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。容器提供回调接口和上下文环境给组件。EJB和Apache Avalon都使用这种方式。

 

两者的区别在于:

         前者是被动的接收对象,在类A的实例创建过程中即创建了依赖的B对象,通过类型或名称来判断将不同的对象注入到不同的属性中,而后者是主动索取响应名称的对象,获得依赖对象的时间也可以在代码中自由控制。

 

五、优缺点

 

1、 IoC最大的好处是什么?

        因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拔(有点象USB接口和SCSI硬盘了)。

2、IoC最大的缺点是什么?

1生成一个对象的步骤变复杂了(事实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。

2对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。

3缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

 

六、结束语

        

         本篇博客只是对依赖反转的一个简单认识,下一篇博客,将会为根据自己以前学的设计模式,对依赖反转和设计模式来个一锅炖,来看看依赖反转到底是个什么东东?敬请期待吧!


初识控制反转(IoC)

标签:

原文地址:http://blog.csdn.net/caozhangyingfei0109/article/details/44158535

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!