Classworking工具箱: 将aspect放到werk中 - 编程入门网
Classworking工具箱: 将aspect放到werk中时间:2011-10-16 IBM Dennis Sosnoskiaspect 可以清除代码污染吗?使用 AspectWerkz 框架进行日志记录是第一步 简介:面向方面编程(Aspect-oriented programming,AOP)通过将在应用程序范围内起作用的功能 分离出来而不是放到某个类或者包中,可以使代码保持清洁。日志记录是这种功能的一个常用的例子。 AOP 是否可以帮助进行日志记录?在本文中,开发人员和 AOP 拥护者 Dennis Sosnoski 对 AspectWerkz 框架的使用进行分析以找出答案。 在我的关于 Java 编程动态性 的文章中,展示了如何用 classworking 技术实现对程序行为的系统改 变。这种方法是 Java 平台上用面向对象编程(AOP)进行的大多数工作的基础。在本文中,我将展示如 何用 AOP 框架在 classworking 之上构建更高层次以实现同样的系统改变,从而提高使用的方便性。 AspectWerkz 介绍 Java 平台有许多 AOP 框架。在本系列文章中,我选择使用 AspectWerkz 框架,这是一个由 BEA Systems 赞助的开放源代码项目。AspectWerkz 不是针对 Java 技术的最早的 AOP —— 这项荣誉属于 IBM 支持的 Java 编程语言的 AspectJ 扩展 —— 但是作为一种快速、强大且灵活的,与标准 Java 代 码结合的 AOP 框架,AspectWerkz 获得了越来越多的关注。AspectWerkz 和 AspectJ 团队最近宣布合并 他们的工作,所以未来我们将会看到这两种 Java 编程的 AOP 方法的最好的特性结合到一个产品中。我 将在本专栏中跟踪这一点,但是现在我将坚持使用基本的 AspectWerkz 框架。 注意: 不要错过新的 AOP@Work 专栏,它对 AOP 的实际使用做了很好的介绍。它开始于 2005 年 2 月,由五位重要的 AOP 专家执笔,这个为期一年的系列中的每一篇文章都会提供可以立即加以应用的知 识。 当 AOP 支持者列出日常开发的 AOP 应用程序时,似乎总是用到了日志记录。在典型企业应用程序代 码的很大部分中都会使用日志记录,显然这是需要关注的内容。日志记录代码与应用程序的主要目的无关 ,并且它还有可能对代码产生很大干扰。这些特点结合在一起使得日志记录成为构建 aspect 的很好候选 对象。我将分析一个实现日志记录和性能度量相结合的 aspect,以观察将 aspect 范式应用到这种类型 的问题的情况。 AspectWerkz 基础 AspectWerkz 网站提供了大量文档和使用示例,以及关于使用 AspectWerkz 的文章的链接。我不准备 在这里重复这些内容,但是我将简要介绍我认为最重要的概念:pointcut、aspect 和 advice。 pointcut 基本上只是一个中断应用程序执行的(由源代码定义的)“正常” 流程并做一些不同的事 情的地方。AspectWerkz 支持与 Java 代码结构相关的许多类型的 pointcut,包括方法调用或者执行、 字段 get/set 和异常处理器执行,以及组合(包括特定执行路径中的代码)。 用 AspectWerkz 术语来说,一个 aspect 就是一个 Java 类,它可以作为交叉关注(crosscutting concern)的目标。让一个类成为 aspect 不需要实现特殊的接口,但是需要特定的方法签名以使类作为 一个 aspect 被访问。一般来说,希望 aspect 类在标准应用程序类层次结构之外,因为可能只是通过 AspectWerkz 框架使用它们,不过,对于它们所在的位置同样没有特殊要求(在运行时类路径中除外)。 advice 是 aspect 类中的一个方法,在 pointcut 处用它来做“某些不同的事件”。 advice 的默认 方法签名接受一个参数,该参数提供关于中断的 pointcut 的信息。清单 1 显示了一个 aspect 类的例 子,它定义了在方法调用上,将被用作前 advice 和后 advice 的两个方法。 Classworking工具箱: 将aspect放到werk中(2)时间:2011-10 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |