快速业务通道

AOP@Work: 用AspectJ和Spring进行依赖项插入 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

AOP@Work: 用AspectJ和Spring进行依赖项插入

时间:2011-09-07 IBM Adrian Colyer

面向方面开发人员可以采用的高级技术

简介:依赖项插入和面向方面编程是互补的技术,所以想把它们结合在一起 使 用是很自然的。请跟随 Adrian Colyer 一起探索两者之间的关系,并了解怎样 才 能把它们组合在一起,来促进高级的依赖项插入场景。

依赖项插入和面向方面编程(AOP)是两个关键的技术,有助于在企业应用程 序中简化和纯化域模型和应用程序分层。依赖项插入封装了资源和协调器发现的 细节,而方面可以(在其他事情中)封装中间件服务调用的细节 —— 例如,提 供事务和安全性管理。因为依赖项插入和 AOP 都会形成更简单、更容易测试的 基 于对象的应用程序,所以想把它们结合在一起使用是很自然的。方面可以帮助把 依赖项插入的能力带到更广的对象和服务中,而依赖项插入可以用来对方面本身 进行配置。

在这篇文章中,我将介绍如何把 Spring 框架的依赖项插入与用 AspectJ 5 编写的方面有效地结合在一起。我假设您拥有基本的 AOP 知识(如果没有这方 面 知识 ,可以在 参考资料 中找到一些良好的起点),所以我的讨论将从对基于 依 赖项插入的解决方案中包含的关键角色和职责的分析开始。从这里,我将介绍如 何通过依赖项插入配置单体(singleton)方面。因为配置非单体方面与配置域 对 象共享许多公共内容,所以后面我会研究一个应用于这两者的简单解决方案。总 结这篇文章时,我会介绍如何为多个高级依赖项插入场景使用方面,其中包括基 于接口的插入和重复插入。

请参阅 下载 获得文章的源代码,参阅 参考资料 下载 AspectJ 或 Spring 框架,运行示例需要它们。

什么是依赖项插入?

在 Domain-Driven Design 一书中,Eric Evans 讨论了如何把对象与建立对 象的配置和关联的细节隐藏起来:

对象的大部分威力在于对象内部复杂的配置和关联。应当对对象进行提炼, 直 到与对象的意义或者在交互中支持对象的作用无关的东西都不存在为止。这个中 间循环的责任很多。如果让复杂对象负责自己的创建,就会出现问题。

Evans 接着提供了一个汽车引擎的示例:它的众多部件一起协作,执行引擎 的 职责。虽然可以把引擎块想像成把一组活塞插入气缸,但是这样的设计会把引擎 明显地弄复杂。相反,技工或机器人装配引擎,引擎本身只考虑自己的操作。

虽然这个示例是我从书中介绍用于复杂对象创建的工厂 概念一节中取出的, 但是我们也可以用这个概念解释依赖项插入技术的动机。

从协作到合约

针对这篇文章的目的,可以把依赖项插入想像成对象和对象的执行环境之间 的 合约。对象(执行 ResourceConsumer、 Collaborator 和 ServiceClient 的其 中一个角色或全部角色)同意不出去搜索自己需要的资源、它与之协作的合作伙 伴或它使用的服务。相反,对象提供一种机制,让这些依赖项可以提供给它。接 下来,执行环境同意在对象需要它的依赖项之前,向对象提供所有的依赖项。

解析依赖项的方法在不同的场景中各有不同。例如,在单元测试用例中,对 象 的执行环境是测试用例本身,所以测试设置代码有责任直接满足依赖项。在集成 测试或应用程序在生产环境时,代理 负责寻找满足对象依赖项的资源,并把它 们 传递给对象。代理的角色通常是由轻量级容器扮演的,例如 Spring 框架。不管 依赖项是如何解析的,被配置的对象通常不知道这类细节。在第二个示例中,它 可能还不知道代理的存在。

AOP@Work: 用AspectJ和Spring进行依赖项插入(2)

时间:2011-09-07 IBM Adrian Colyer

代理(例如 Spring 框架)有四个关键职责,在整篇文章中我将不断提到这 些 职责,它们是:

确定对象需要配置(通常因为对象刚刚创建)

确定对

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号