(CHS)Inversion of Control Containers and the Dependency Injection pattern

(CHS)Inversion of Control Containers and the Dependency Injection pattern

ID:39908316

大小:140.00 KB

页数:18页

时间:2019-07-14

(CHS)Inversion of Control Containers and the Dependency Injection pattern_第1页
(CHS)Inversion of Control Containers and the Dependency Injection pattern_第2页
(CHS)Inversion of Control Containers and the Dependency Injection pattern_第3页
(CHS)Inversion of Control Containers and the Dependency Injection pattern_第4页
(CHS)Inversion of Control Containers and the Dependency Injection pattern_第5页
资源描述:

《(CHS)Inversion of Control Containers and the Dependency Injection pattern》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、IoC容器和DependencyInjection模式MartinFowler编者语:最近研究IoC,在网上搜索到很多网页推荐阅读MartinFowler的一片名叫InversionofControlContainersandtheDependencyInjectionpattern的文章。点击到该文章页面便吓了一跳:这什么文章啊,简单一个网页PageRank居然是7!要知道,国内几大门户网站也都还没有到这个值呢!也难怪,MartinFowler被誉为软件开发教父,他的文章,肯定有N多人拜读。细细读来,感觉大师

2、确实很厉害,文章条理清晰,论证深入,结论明确!本想将此好文翻译推荐给广大网友,可在网上一搜,早有前人将其翻译成中文了。这里,我将网上流传的中文版整理后,推荐给广大的编程爱好者,希望大师的精彩讲解能够让你对相关问题有一个透彻的理解。同时,我还将其整理成了Word文档,需要的朋友点这里下载。摘要:Java社群近来掀起了一阵轻量级容器的热潮,这些容器能够帮助开发者将来自不同项目的组件组装成为一个内聚的应用程序。在它们的背后有着同一个模式,这个模式决定了这些容器进行组件装配的方式。人们用一个大而化之的名字来称呼这个模式

3、:“控制反转”(InversionofControl,IoC)。在本文中,我将深入探索这个模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(DependencyInjection),并将其与“服务定位器”(ServiceLocator)模式作一个比较。不过,这两者之间的差异并不太重要,更重要的是:应该将组件的配置与使用分离开——两个模式的目标都是这个。目录组件和服务3一个简单的例子3控制反转5依赖注入的几种形式6使用PicoContainer进行构造函数注入6使用Spring进行设值方法注入8接口注

4、入9使用ServiceLocator10为定位器提供分离的接口12动态服务定位器12用Avalon兼顾服务定位器和依赖注入13作出一个选择14ServiceLocatorvs.DependencyInjection14构造函数注入vs.设值方法注入15代码配置vs.配置文件16分离配置与使用17更多的问题17结论和思考17致谢18在企业级Java的世界里存在一个有趣的现象:有很多人投入很多精力来研究主流J2EE技术的替代品——自然,这大多发生在opensource社群。在很大程度上,这可以看作是开发者对主流J2

5、EE技术的笨重和复杂作出的回应,但其中的确有很多极富创意的想法,的确提供了一些可供选择的方案。J2EE开发者常遇到的一个问题就是如何组装不同的程序元素:如果web控制器体系结构和数据库接口是由不同的团队所开发的,彼此几乎一无所知,你应该如何让它们配合工作?很多框架尝试过解决这个问题,有几个框架索性朝这个方向发展,提供了更通用的“组装各层组件”的方案。这样的框架通常被称为“轻量级容器”,PicoContainer和Spring都在此列中。在这些容器背后,一些有趣的设计原则发挥着作用。这些原则已经超越了特定容器的范

6、畴,甚至已经超越了Java平台的范畴。在本文中,我就要初步揭示这些原则。我使用的范例是Java代码,但正如我的大多数文章一样,这些原则也同样适用于别的OO环境,特别是.NET。组件和服务装配程序元素,这样的话题立即将我拖进了一个棘手的术语问题:如何区分“服务”(service)和“组件”(component)?你可以毫不费力地找出关于这两个词定义的长篇大论,各种彼此矛盾的定义会让你感受到我所处的窘境。有鉴于此,对于这两个遭到了严重滥用的词汇,我将首先说明它们在本文中的用法。所谓“组件”是指这样一个软件单元:它将

7、被作者无法控制的其他应用程序使用,但后者不能对组件进行修改。也就是说,使用一个组件的应用程序不能修改组件的源代码,但可以通过作者预留的某种途径对其进行扩展,以改变组件的行为。服务和组件有某种相似之处:它们都将被外部的应用程序使用。在我看来,两者之间最大的差异在于:组件是在本地使用的(例如JAR文件、程序集、DLL、或者源码导入);而服务是要通过同步或异步的远程接口来远程使用的(例如webservice、消息系统、RPC,或者socket)。在本文中,我将主要使用“服务”这个词,但文中的大多数逻辑也同样适用于本地

8、组件。实际上,为了方便地访问远程服务,你往往需要某种本地组件框架。不过,“组件或者服务”这样一个词组实在太麻烦了,而且“服务”这个词当下也很流行,所以本文将用“服务”指代这两者。一个简单的例子为了更好地说明问题,我要引入一个例子。和我以前用的所有例子一样,这是一个超级简单的例子:它非常小,小得有点不够真实,但足以帮助你看清其中的道理,而不至于陷入真实例子的泥潭中无法自拔。在这个例子中,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。