反转控制容器及依赖注入模式.docVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
反转控制容器和依赖注入模式 在Java社区有繁忙,有助于从不同的项目组装成一个有凝聚力的应用组件的轻量级容器。这些容器的背后,是他们的表现如何接线,非常通用名称下的“控制反转”是指一个概念,他们的一个共同的模式。在这篇文章中,我这种模式是如何工作的深入,更具体的名称下的“依赖注入”,对比与服务定位器替代。它们之间的选择是小于配置与使用分离的原则的重要。 2004年1月23日 马丁福勒 翻译:中国 葡萄牙 法国 意大利 罗马尼亚 标签:流行 · 设计 · 对象的协同设计 ·应用架构 内容 组件和服务 一个天真的例子 控制反转 依赖注入的形式 与PicoContainer的构造器注入 与Spring的setter注入 接口注入 使用服务定位器 使用定位器的隔离接口 动态服务定位器 使用Avalon的同时定位和注射 决定要使用的选项 服务定位器和依赖注入 构造与setter注入 代码或配置文件 从使用分离配置 一些进一步的问题 结论性的思考 关于企业Java世界的有趣的事情之一,是在建设的主流J2EE技术的替代品的大量活动,其中大部分发生在开源。很多这是一个在主流的J2EE世界重量级复杂的反应,但它也正在研究替代品和创意。处理一个共同的问题是如何连接在一起的不同元素:你怎么结合在一起的网络控制器架构,数据库接口支持时,他们建立由不同团队的的框架other.A数量每个小知识已刺伤在这个问题上,有几个分支,提供一般的能力,从不同层次的组件组装。这些通常被称为轻量级容器的例子包括PicoContainer的,和。 相关这些容器是一些有趣的设计原则,去超越这些具体的容器,确实是Java平台的事情,。在这里,我要开始探索其中的一些原则。我使用的例子是在Java中,但也同样适用于其他面向对象的环境,特别是最喜欢我的写作原则。net。 组件和服务 布线元素的主题一起拉着我几乎立刻进入棘手的术语问题,围绕服务和组件的条款。你会发现这些东西轻松的定义上的长期和矛盾的文章。对于我而言这里是我目前使用这些重载的条款。 我使用的组件要使用的,没有改变的应用程序是控制组件作家,这意味着软件的glob。由“没有改变”我的意思是不会改变使用的应用程序组件的源代码,虽然他们可能会通过扩展在组件作家所允许的方式,它改变组件的行为。 服务是相似的,它是由外国申请使用的组件。主要区别是,我希望在本地使用一个组件(认为jar文件,装配,DLL,或源进口)。服务将通过一些远程接口,无论是同步还是异步远程使用(如Web服务,邮件系统的RPC,或插座。) 在这篇文章中,我主要使用的服务,但很多相同的逻辑可以适用于本地组件。事实上你往往需要某种本地组件框架,可以方便地访问远程服务。但写“组件服务”累人的读取和写入,和服务的时刻,更时尚。 一个天真的例子 为了帮助更具体,我将使用一个运行的例子,谈论这一切。像我所有的例子是那些超级简单的例子之一,小到足以是不真实的,但希望你想象发生了什么事情没有落入一个真实的例子沼泽。 在这个例子中,我写的一个组件,它提供了一个由一个特定的导演执导的电影列表。这个惊人的有用的功能,实现由单一的方法。 class MovieLister... public Movie[] moviesDirectedBy(String arg) { List allMovies = finder.findAll(); for (Iterator it = allMovies.iterator(); it.hasNext();) { Movie movie = (Movie) it.next(); if (!movie.getDirector().equals(arg)) it.remove(); } return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]); } 此功能的实现是在极端的天真,它要求一个finder对象(我们将在某一时刻)返回它知道每部电影。那么它只是狩猎返回由一个特定的导演执导的,通过这个列表。这一块特别的幼稚,我不打算修复,因为它只是这篇文章的真正的脚手架。 这篇文章的真正的问题是这个取景器的对象,尤其是如何连接对象与特定的Finder对象的李斯特。之所以出现这种有趣的是,是,我想我的精彩 moviesDirectedBy方法到是完全独立于所有的电影是如何被存储。因此,所有的方法,是指一个发现者,所有发现者不知道该如何应对 findAll方法。我可以把这个定义取景器接口。 public interface MovieFinder { Lis

文档评论(0)

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

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

1亿VIP精品文档

相关文档