- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7轻量级容器和控制反转
控制反转 IOC之前的Bean协作关系 直接实例化并持有 控制反转 “直接实例化并持有”的缺点: XsService中硬编码创建了XsDao,如果需要另一种Dao的实现,比如 ZzxsDao(在职学生Dao),则需要修改XsService的源码,就是说,XsService组件不能脱离XsDao的实现。 XsDao的实例无法被其他Bean共享,它的生命周期被定义在Service中。 如果XsDao需要应用其他的资源,例如DataSource,则XsService需要维护一个DataSource,而这完全不是作为上层组件Service层的职责。 控制反转 如果系统中有大量组件,其生命周期和相互依赖的关系如果由组件自身来维护,不但大大增加了系统的复杂度,而且会导致组件之间极为紧密的耦合,继而给测试和维护带来极大的困难。 所以核心问题就是如何组装大量的组件,使之配合完成复杂系统功能? 控制反转 使用IOC的Bean协作关系 控制反转 带来的好处: XsService不必关心如何创建XsDao的实例,也不必关心XsDao的具体实现,只需要使用它就可以了。大大简化了XsService。 XsDao的实例由IOC容器管理,可以在多个组件之间共享。 AOP AOP与OOP OOP是一种成功的编程范式,但它没有办法帮我们把四下散落的代码模块化 AOP的目标是将横切性(crosscutting)的问题以一种更加通用的方式模块化,从而提升程序的模块化程度。 AOP AOP与OOP AOP应被看做是OOP的补充,而不是竞争对手 AOP可以弥补OOP的一些缺陷 AOP AOP里的术语 轻量级容器与控制反转 清华大学计算机与信息管理中心 邹文艳 zwy@cic.tsinghua.edu.cn 2008年7月 主要内容 容器的概念 什么是轻量级容器 控制反转 面向切面的编程 容器的概念 什么是容器? 指应用代码的运行框架,应用对象(大部份时候是业务对象)在容器里运行,这也就是我们所说的“被容器管理”; 容器的概念 什么是容器? 有很多以容器为基础的架构和模型:我们过去管理J2EE业务对象最常用EJB,现在可以选择Spring J2EE的 web 容器比较特殊,它用于管理Servlet 及其相关依赖对象。 容器的作用 1、生命周期管理 用于控制应用对象运行的生存周期 最起码,容器必须将“创建新对象”的逻辑从使用者那里抽象出来。 更精细的生命周期管理可能包括诸多的回调机制, 在需要激活对象,或者容器本身即将析构时,可以通过这些回调机制通知被管理的对象 容器的作用 2、查找服务 容器应该提供某种途径,用于获得受管对象的引用。 容器的查询功能将“对业务对象实现细节的了解”从使用者那里抽象出来,将其隐藏在容器内部。 查找服务是容器的核心服务 容器的作用 3、配置管理 容器需要提供统一的方法来配置运行其中的对象,并且允许对象的参数化 简单的配置值应该从Java代码中抽取出来,这样 在改变配置时,就不需要重新编译代码,也无须麻烦Java开发人员 容器的作用 4、依赖决议 容器不仅可以管理String,int 之类的简单类 型的配置,还可以管理其中各个对象之间的关系。 容器的作用 容器里的对象 容器所管理的对象与粒度无关,受管对象的粒度依靠业务需求和整体架构来决定,可以是粗粒度,也可以是细粒度。 尽管它们在容器中运行,但不应该背离OO的原则 容器提供的增值服务 1、企业级服务 为容器内运行的对象提供事务管理或其它声明性服务。 (2)、线程管理 : 对于访问受管对象的操作,容器可以提供一个线程模型, 容器提供的增值服务 2、线程管理 对于访问受管对象的操作,容器可以提供一个线程模型 容器提供的增值服务 3、对象池 提供一个实例池来管理对象 容器提供的增值服务 4、集群服务 容器可以自己提供集群的支持,客户端可以完全透明地和不同容器进行通信。 容器提供的增值服务 5、管理 容器为其中运行的对象提供管理服务,用户可以通过管理控制台或者JMX进行管理。 容器提供的增值服务 6、可定制性和扩展性 允许为受管对象提供定制服务 例如安全检查等声明性服务,(如Acegi) 轻量级容器 轻量级容器应当有如下特性: (1)、可以管理代码,而又不给应用代码强加对容器的依赖。 (2)、可以快速启动 (3)、不需要任何特殊的部署步骤; 轻量级容器 轻量级容器应当有如下特性: (4)、最小
文档评论(0)