快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
   signature.getName());    } }

为了测试这段初步的日志记录代码,我将使用一个精巧的递归方法,它是斐波纳契数列计算的一个实 现,如清单 4 所示。

清单 4. 斐波纳契数列计算

package com.sosnoski.aspectwerkz; public class FiboTest {    private long fibo(int value) {      if (value > 2) {        return fibo(value-1) + fibo(value-2);      } else {        return 1;      }    }    public static void main(String[] args) {      FiboTest inst = new FiboTest();      int value = Integer.parseInt(args[0]);      System.out.println("Fibo[" + value + "] is " +        inst.fibo(value));    } }

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

时间:2011-10-16 IBM Dennis Sosnoski

直接运行这段代码很简单:

[dms]$ java -cp classes com.sosnoski.aspectwerkz.FiboTest 6 Fibo[6] is 8 

用 AspectWerkz 运行它要复杂一些。有两种用 AspectWerkz 实现 aspect 处理的方法: 编译时类修 改和运行时类修改。在本文中,我将使用运行时方法。这种方法需要一个作为 AspectWerkz 框架一部分 提供的客户类装载器。为 AspectWerkz 安装主目录建立一个环境变量,并假定 XML 配置(见 清单 2) 是在 aspectwerkz.xml 文件中,下面是使用 AspectWerkz 的 清单 4 的 Linux 和 UNIX 版本(命令行 加了换行以适合本文的宽度限制):

[dms]$ $ASPECTWERKZ_HOME/bin/aspectwerkz    -Daspectwerkz.definition.file=aspectwerkz.xml    -cp classes com.sosnoski.aspectwerkz.FiboTest 6

得到的输出也要长得多。在这里和在其他的例子中,我将忽略由 AspectWerkz 打印的启动信息,并显 示由我的 advice 生成的输出。输出如清单 5 所示:

清单 5. 修改后的计算结果

Entering method fibo Entering method fibo Entering method fibo Entering method fibo Entering method fibo Leaving method fibo Entering method fibo Leaving method fibo Leaving method fibo Entering method fibo Leaving method fibo Leaving method fibo Entering method fibo Entering method fibo Leaving method fibo Entering method fibo Leaving method fibo Leaving method fibo Leaving method fibo Entering method fibo Entering method fibo Entering method fibo Leaving method fibo Entering method fibo Leaving method fibo Leaving method fibo Entering method fibo Leaving method fibo Leaving method fibo Leaving method fibo Fibo[6] is 8

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

时间:2011-10-16 IBM Dennis Sosnoski

加以改进

清单 5 显示调用了 清单 3 中的 advice 方法, 但是没有提供关于所执行的应用程序的很多有用信 息。通过修改这个 advice 以缩进方式显示嵌套的方法调用,并且打印传递和返回的值,我将改进这一不 足。为此,我还要将这个 advice 改为另一种类型:around advice 类型。清单 6 显示了修改后的代码 。

清单 6. 带有缩进和值打印的 advice 方法

private int m_nestingDepth; private void indent() {      for (int i = 0; i < m_nestingDepth; i++) {        System.out.print('' '');      }    } private void printCall(JoinPoint call) {    MethodSignature signature =      (MethodSignature)call.g

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