AOP@Work: 使用AspectJ 5检验库方面 - 编程入门网
;S,O> {
protected pointcut changing() : execution(void S.go());
protected void updateObserver(S s, O o) {
o.going(s);
}
}
为应对 Zed 对取消代码(使方面更易于测试)的关注,您将大部分功能都置 于库方面超类 AbstractSubjectObserver 中。这使库的规模可与具体方面一样 小: 清单 16. 最小化的库方面
客户机注册观察者时,可使用 AbstractSubjectObserver 的引用避免直接依 赖方面(尽管使用了方面,但客户机无需了解这一点!)。若取得了方面,就必 须直接调用 subjectChanged(..),而客户机不需要更新。 Zed 非常欣赏此解决方案,他甚至要求 Mary 将其作为必需的测试代码进行 实验。若无意外,Zed 将批准在产品中使用此解决方案。 Zed 组织讨论 现在您已取出了口袋中的所有方面,问题出现了:Zed 究竟能否批准方面成 为团队日常部署的一部分?他对此持几分赞成态度?Zed 请 Arnold、Buddy 和 Connor 向所有人展示他们的学习成果,通过这个机会,您可以在他们独立编写 方面之前,审查其思想的完整性和正确性。 AOP@Work: 使用AspectJ 5检验库方面(12)时间:2011-09-07 IBM Wes IsbergArnold 对切入点的理解 Arnold 一直对切入点很感兴趣,Erin 以代码审查方面标记他的代码后,他 又对 declare error 和 declare warning 语句产生了特殊兴趣。而您使用这种 机制防御性地编写库方面、在子方面切入点中标记错误,这令 Arnold 感到非常 惊讶(回想起来,又发现这非常有意义)。例如,并行方法仅可包含返回空值的 方法调用,如清单 17 所示: 清单 17. 并行方法执行
还有另外一个例子,CacheMethodResult 假定切入点仅可辨别方法调用或方 法执行联结点,因此,若指定了任何未经许可的联结点,就会出现警告: 清单 18. 切入点声明错误
CacheMethodResult 许可哪些内容呢?返回特定类型的方法调用或执行,如 清单 19 所示: 清单 19. 许可的结果
记住,这里的 Result 是一个类型参数。若具体子方面指定以 String 作为 类型,则该方面仅许可返回类型为 String 的方法签名。 同样,若切入点选择的不是方法执行,若方法不返回空值,若方法接受参数 ,IdempotentMethod 就会声明错误。它使用切入点指定联结点。反之, IdempotentMethods 使用仅可应用于方法的注释,因此仅在注释错误地放置在返 回非空值或接受参数的方法中时,才需要发出警告 —— 更正注释的放置错误。 (Irene 认为这仅在验证注释时才有用)。Arnold 领会了其中的关键:只要可 能,就应向部署程序提供关于错误的织入时反馈,而不是使方面在运行时失败。 您补充,有些此类反馈是随通知一同出现的。只要通知声明它抛出异常,若 应得到通知的联结点未得到抛出异常的许可,AspectJ 工具就会发出错误信号。 同样,若得到通知的联结点无法返回 around 通知的结果,这些工具也会发 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |