Welcome 微信登录

首页 / 软件开发 / JAVA / AOP@Work: 使用AspectJ 5检验库方面

AOP@Work: 使用AspectJ 5检验库方面2011-09-07 IBM Wes Isberg编写符合所有类型用户需求的可重用方面

简介:AspectJ 5 新的语言和部署特性简化了库方面(library aspect), 而 库方面又保证一般的开发人员能够掌握 AOP。尽管有着不可思议的易用性,但它 们编写起来非常困难。在 AOP@Work 系列 的这部分内容中,Wes Isberg 编了一个假想的故事,故事所讲述的世界离您的现实生活并不遥远,其 中 有 30 个重大的挑战。通过这个故事,您将学会如何使用及编写库方面,以及如 何为相信这一技术和不相信这一技术的人交付解决方案。

救命!

一名遇险的少女上气不接下气地跑到您面前:“救命! 测 试时一切都好好的,但部署之后,系统突然停止了。没有异常!什么都没有!没 有人知道该怎么做!世界和平正濒临危险!”

您没有多问一个字, 只是打开背包,取出两个瓶子,“试试这个:”

java -javaagent:aspectjweaver.jar -classpath "vmErrorAspect.jar:${CLASSPATH}" ..
一分钟后,弹 出一个堆栈跟踪。某人在某处将所有 Error 记入了日志,包括 OutOfMemoryError ,并继续运行。多亏了您的方面 RethrowVMError !

从魔法瓶到具体方面

实际上,上面提到的两个瓶子中并没有任何魔法: 仅 仅是库方面中的通知(advice),即用装入时织入部署的。库方面 RethrowVMError 会在任何急切的错误处理程序抛出错误之前运行通知,防止其 隐 藏 VMError。AspectJ 5 拥有一些可简化库方面编写的新的语言特性,以及一些 简化具体方面使用的新的部署选项。这些特性和选项共同使经验较少(在使用容 错构建或部署流程方面经验较少)的广大新用户容易掌握 AOP —— 但前提是库方面必须得到很好的调整。作为一名编写库方面的专家 —— 至少是为读者介绍足够知识的作者,我借本文诚挚邀请各位亲 爱 的读者积极提出恰当的问题,并根据相应的回答部署简单的库方面解决方案。

RethrowVMError 是一个简单但强大的解决方案,易于理解和使用。其他 库方面的能力、可理解性和工具与之相比要更为综合。什么才是出色的库方面? 我认为,成功交付库方面源于按用户的需求和技能为其量身订做解决方案,而不 是试图提供最强大或最具可重用性的解决方案。在本文中,您将从一个简单的小 故事中了解到如何从评估用户着手设计方面。作为故事的主角,您的伟大任务就 是为终端用户编写库方面,这些用户的水平参差不齐,从简单的 XML 部署人员 一 直到 Java™ 和 AspectJ 程序员。在故事的发展过程中,您还要对一些希 望成为 AOP 专家的人进行培训,并说服一名持不信任态度的主管采纳 AOP。在 取 得最后的成功时,您将看到,树立所有人对 AOP 信心的关键正是坚实地走完每 一 步。

AspectJ 5 中的可重用方面

AspectJ 5 使可重用方面的编写 比以往任何时候都要更加容易。首先,它有着扩展方面和编写切入点(pointcut )的新形式,不仅在纯粹的 Java 方支持 Java 5 语言特性,更在 AspectJ 语 言 内部支持这些特性。Java 5 注释使那些从未接触过方面的 Java 开发人员能够 理 解甚至编写方面。同时,泛型类型为类型的限定增加了安全性和新方法,尤其是 对于新参数化库方面的用户。本文中介绍的方面示范了所有这些特性。

其 次,AspectJ 5 使得编写和部署方面更为容易,且不需使用 AspectJ 编译器。 在 编写方面,它支持将方面作为纯 Java 代码的注释编写,如 AspectWerkz。这些 注释风格 的方面可由 javac 编译,并随后使用织入器织入。在部署方面,新的 装入时织入器支持 XML 配置文件 META-INF/aop.xml,允许您为一个具体方面中 的抽象库方面声明具体切入点。第一批面世的库方面很可能会采用这种形式,因 为用户不需要了解关于 AspectJ 的一切内容,只需完成部署库所必需的最低限 度 XML 编辑工作。

有了这些部署 AspectJ 库的新方法之后,用户就只需要 知道部署其方面所必需的内容。装入时织入器最小化了开发和构建流程的影响, 方面库可最小化所需的专门技术 —— 但前提是库开发人员能够应对 挑战,编写出健壮的方面,并使其与部署人员提供的最小化规范协同工作。