快速业务通道

AOP@Work: 使用AspectJ 5检验库方面 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
;S,O> { protected pointcut changing() : execution(void S.go()); protected void updateObserver(S s, O o) { o.going(s); } }

为应对 Zed 对取消代码(使方面更易于测试)的关注,您将大部分功能都置 于库方面超类 AbstractSubjectObserver 中。这使库的规模可与具体方面一样 小:

清单 16. 最小化的库方面

public abstract aspect SubjectObserver<Subject, Observer> extends AbstractSubjectObserver<Subject, Observer> { protected abstract pointcut changing(); after(Subject subject) returning : target(subject) && changing() { subjectChanged(subject); } }

客户机注册观察者时,可使用 AbstractSubjectObserver 的引用避免直接依 赖方面(尽管使用了方面,但客户机无需了解这一点!)。若取得了方面,就必 须直接调用 subjectChanged(..),而客户机不需要更新。

Zed 非常欣赏此解决方案,他甚至要求 Mary 将其作为必需的测试代码进行 实验。若无意外,Zed 将批准在产品中使用此解决方案。

Zed 组织讨论

现在您已取出了口袋中的所有方面,问题出现了:Zed 究竟能否批准方面成 为团队日常部署的一部分?他对此持几分赞成态度?Zed 请 Arnold、Buddy 和 Connor 向所有人展示他们的学习成果,通过这个机会,您可以在他们独立编写 方面之前,审查其思想的完整性和正确性。

AOP@Work: 使用AspectJ 5检验库方面(12)

时间:2011-09-07 IBM Wes Isberg

Arnold 对切入点的理解

Arnold 一直对切入点很感兴趣,Erin 以代码审查方面标记他的代码后,他 又对 declare error 和 declare warning 语句产生了特殊兴趣。而您使用这种 机制防御性地编写库方面、在子方面切入点中标记错误,这令 Arnold 感到非常 惊讶(回想起来,又发现这非常有意义)。例如,并行方法仅可包含返回空值的 方法调用,如清单 17 所示:

清单 17. 并行方法执行

declare error : withincode(@ParallelMethod * *(..)) && !call(void *(..)) : "Parallel methods contain only void method- calls";

还有另外一个例子,CacheMethodResult 假定切入点仅可辨别方法调用或方 法执行联结点,因此,若指定了任何未经许可的联结点,就会出现警告:

清单 18. 切入点声明错误

declare warning : targetPointcut() && ! permittedPointcuts() : "targetPointcut() restricted to permittedPointcuts() ";

CacheMethodResult 许可哪些内容呢?返回特定类型的方法调用或执行,如 清单 19 所示:

清单 19. 许可的结果

/** method-call or -execution returning Result (+: covariant ok) */ pointcut permittedPointcuts() : execution(Result+ *(..)) || call(Result+ *(..));

记住,这里的 Result 是一个类型参数。若具体子方面指定以 String 作为 类型,则该方面仅许可返回类型为 String 的方法签名。

同样,若切入点选择的不是方法执行,若方法不返回空值,若方法接受参数 ,IdempotentMethod 就会声明错误。它使用切入点指定联结点。反之, IdempotentMethods 使用仅可应用于方法的注释,因此仅在注释错误地放置在返 回非空值或接受参数的方法中时,才需要发出警告 —— 更正注释的放置错误。 (Irene 认为这仅在验证注释时才有用)。Arnold 领会了其中的关键:只要可 能,就应向部署程序提供关于错误的织入时反馈,而不是使方面在运行时失败。

您补充,有些此类反馈是随通知一同出现的。只要通知声明它抛出异常,若 应得到通知的联结点未得到抛出异常的许可,AspectJ 工具就会发出错误信号。 同样,若得到通知的联结点无法返回 around 通知的结果,这些工具也会发

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