java培训什么是控制度反转ioc.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JAVA培训:什么是控制反转(IOC) 一、IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由 N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分 别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描 述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起, 协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个 齿轮出了问题,就可能会影响到整个齿轮组的正常运转。 齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。 对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在, 伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常 会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设 计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全 身的情形。 图2:对象之间复杂的依赖关系 耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间, 以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合 度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题, 软件专家Michael Mattson 提出了IOC 理论,用来实现对象之间的“解耦”,目前 这个理论已经被成功地应用到实践当中,很多的J2EE 项目均采用了 IOC 框架产 品Spring 。 二、什么是控制反转(IoC) IOC 是Inversion of Control 的缩写,多数书籍翻译成“控制反转”,还有些书 籍翻译成为“控制反向”或者“控制倒置”。 1996 年,Michael Mattson 在一篇有关探讨面向对象框架的文章中,首先提 出了 IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了 很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象 类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而 且可以灵活地被重用和扩展。IOC 理论提出的观点大体是这样的:借助于“第三 方”实现具有依赖关系的对象之间的解耦,如下图: 图:IOC 解耦过程 大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC 容器,使得 A 、B、C、D 这4 个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方” 了,全部对象的控制权全部上缴给“第三方”IOC 容器,所以,IOC 容器成了整 个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象 粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联 系,这就是有人把IOC 容器比喻成“粘合剂”的由来。 我们再来做个试验:把上图中间的IOC 容器拿掉,然后再来看看这套系统: 图:拿掉IoC 容器后的系统 我们现在看到的画面,就是我们要实现整个系统所需要完成的全部内容。这 时候,A 、B、C、D 这4 个对象之间已经没有了耦合关系,彼此毫无联系,这样 的话,当你在实现A 的时候,根本无须再去考虑B、C和D了,对象之间的依赖 关系已经降低到了最低程度。所以,如果真能实现IOC容器,对于系统开发而言, 这将是一件多么美好的事情,参与开发的每一成员只要实现自己的类就可以了, 跟别人没有任何关系! 我们再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对比一下: 软件系统在没有引入IOC容器之前,如第一个图中所示,对象A依赖于对象 B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象 B 或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。 软件系统在引入 IOC容器之后,这种情形就完全改变了,如第三个图所示, 由于IOC容器的加入,对象A 与对象 B之间失去了直接联系,所以,当对象 A 运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的 地方。 通过前后的对比,我们不难看出来:对象A

文档评论(0)

housufang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档