快速业务通道

AOP@Work: 使用方面的下几个步骤-学习建议之后 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
合作,这最好在稍后的学习阶段去尝试。跟踪方面可以帮助初学者了解不熟悉的 程序部分如何工作,并在调试间歇出现的问题时获得更深的理解。同样地,清单 1 展示了可以如何使用方面来记录代码中的异常:

清单 1. 使用方面记录异常

public aspect LogModelExceptions {   public pointcut modelCall() :     call(public * com.example.myapp.model..* (..));   public pointcut externalModelCall() :      modelCall() && !within(com.example.myapp.model..*);    after() throwing (Exception e) : externalModelCall() {      logger.error("Error in calling the model", e);   }   private Logger logger = Logger.getLogger("LogModelExceptions"); }

每当程序从模型调用中返回一个异常时,该方面就记录错误。本课程的另一 个 变体是记录不使用异常链的旧框架(比如 Struts)的原始异常,这样就可以查 看 失败的底层原因。这种方法对于跟踪 “吞下” 异常(即,捕获异常 却不处理)的代码中的异常也十分有用。可以通过将其编译到您的应用程序中来 “插入” 该方面。为此,可以使用支持不同构建配置的 IDE,比如 Eclipse、Ant 或其他构建工具。还可以在装载时将其织入,或许可以检修运行 时 不断失败的复杂测试用例。

AOP@Work: 使用方面的下几个步骤-学习建议之后(3)

时间:2011-09-07 IBM Ron Bodkin

初学 AOP 的开发人员有时应用方面来跟踪代 码性能,如清单 2 所示:

清单 2. 使用方面跟踪性能

aspect TrackDataAccessPerformance {  public static long threshold = 100L; // milliseconds  /** call to any public method in the Hibernate API */  public pointcut dataAccessCall() :    call(public * org.hibernate..*(..));  Object around () : dataAccessCall() && MyApp.scope() {    long start = System.currentTimeMillis();    Object result = proceed();    long end = System.currentTimeMillis();    long elapsed = end - start;    if (elapsed > threshold) {        trackSlow(elapsed, thisJoinPointStaticPart,         thisEnclosingJoinPointStaticPart);    }    return result;  }  protected void trackSlow(long elapsed, StaticPart calledJP,   StaticPart callingJP) {     System.out.println("Call from "+callingJP+" to "+calledJP+      " took "+elapsed + "ms");  } } public aspect MyApp {   public pointcut scope() : within(com.example.myapp..*); }

AOP@Work: 使用方面的下几个步骤-学习建议之后(4)

时间:2011-09-07 IBM Ron Bodkin

TrackDataAccessPerformance 方面打印出比给定临界值慢的任何 方法调用的时间,以及调用的方法和调用该方法的位置。这个方面在您希望检查 一套集成测试时十分有用。用加载时织入来插入该方面是最自然的方法。

强制执行方面

在现有的(以及新的)程序中强制执行规则和策略时,方 面 很有用。即使在学习方面的早期,这也是个非常好的应用程序,尤其是在测试代 码中使用时。下面看到的是我更改 trackSlow() 的实现时, TrackDataAccessPerformance 方面发生的操作:

 protected void trackSlow(long elapsed, StaticPart calledJP,   StaticPart callingJP) {    throw new AssertionFailedException ("Call to "+calledJP+      " took too long: "+elapsed + "ms");  }

现在

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