快速业务通道

Classwo***ng工具箱: 将aspect放到werk中 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
-16 IBM Dennis Sosnoski

清单 1. 一个简单的 advice 类及其 advice 方法

package com.sosnoski.aspectwerkz; public class TraceAspect {    public void beforeMethod(JoinPoint join) {      System.out.println("Entering method");    }    public void afterMethod(JoinPoint join) {      System.out.println("Leaving method");    } }

AspectWerkz 还支持其他方法调用签名,不过需要多做一些配置工作。谈到配置, 有一件事要事先说 明。AspectWerkz 支持三种配置形式:

嵌入到源代码的 Java 5.0 annotation。

嵌入到源代码中的、Javadoc 形式的 annotation。

一个外部 XML 文件。

我自己作为一名习惯使用 XML 的人,我将在本文中使用 XML 这种方法。清单 2 显示了清单 1 中的 advice 的一个示例 XML 配置。

清单 2. XML 配置示例

<aspectwerkz>   <system id="AspectWerkzExample">    <package name="com.sosnoski.aspectwerkz">     <aspect class="TraceAspect">      <pointcut name="longMethod"        expression="execution(long ..(..))"/>      <advice name="beforeMethod" type="before"        bind-to="longMethod"/>      <advice name="afterMethod" type="after"        bind-to="longMethod"/>     </aspect>    </package>   </system> </aspectwerkz>

清单 2 的配置定义了一个 aspect,如在类 com.sosnoski.aspectwerkz.TraceAspect 中所实现的。 对于这个 aspect,它定义了一个 pointcut,表示任何返回一个 long 值的方法的执行(表达式中需要匹 配的“..”序列是通配符),并在这个 pointcut 上绑定两个单独的 advice。第一个 advice 是由 advice 类中的 beforeMethod() 实现的,类型为 before (表明这个 advice 方法将在执行 pointcut 方法之前执行)。第二个 advice 是由 afterMethod() 实现的,类型为 after(因此这个 advice 方法 将在执行了 pointcut 方法之后调用)。

Classwo***ng工具箱: 将aspect放到werk中(3)

时间:2011-10-16 IBM Dennis Sosnoski

日志

我已介绍了 AspectWerkz 的基本概念,那么如何将这些概念应用到日志记录功能呢?上一节中的方法 调用例子应该是一个很好的起点。如果可以配置 AspectWerkz 在每次需要关注的方法调用之前和之后, 分别执行 beforeMethod() 和 afterMethod(),那么它们会提供应用程序执行的有用踪迹。

当然,要使执行踪迹有用,需要对 清单 1 的方法给出的最小信息输出进行扩展。幸运的是, AspectWerkz 提供了访问中断的 pointcut 的信息的方便方法。清单 3 中的代码展示了如何访问 pointcut 中的实际方法信息。

清单 3. 报告被中断的方法的 Advice 方法

package com.sosnoski.aspectwerkz; public class TraceAspect {    public void beforeMethod(JoinPoint join) {      MethodSignature signature =        (MethodSignature)join.getSignature();      System.out.println("Entering method " +        signature.getName());    }    public void afterMethod(JoinPoint join) {      MethodSignature signature =        (MethodSignature)join.getSignature();      System.out.println("Leaving method " +     

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号