快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
代码段类似 。 您可以很快地教会她指定所需类型,也就是 com.magickingdom 包之内或之下的 类型:

清单 1. withinTypes

aspect CompanyGS extends GetterSetter {  protected pointcut withinTypes(): within(com.magickingdom..*); }

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

时间:2011-09-07 IBM Wes Isberg

Erin 还可在 AspectJ 5 中通过 aop.xml 实现相同的目的,如清单 2 所示 :

清单 2. 在 aop.xml 内声明具体方面

<concrete-aspect    name="com.magickingdom.CompanyGS"    extends="com.isberg.articles.aop7.invariants.GetterSetter">   <pointcut     name="withinTypes"      expression="within(org.magickingdom..*)"      /> </concrete-aspect>

若向命令行发出错误,则错误的形式与普通编译器错误类似,除非有返回到 定 义该错误的声明语句处的引用,如清单 3 所示:

清单 3. 错误声明消息

C:\article\testsrc\com\isberg\articles\aop7 \invariants\GetterSetterDemo.java:28 [error] non-public field-set outside constructor or setter method i++; ^^^^ field-set(int com.isberg.articles.aop7.invariants.GetterSetterDemo$C.i) see also: C:\article\src\com\isberg\articles\aop7 \invariants\GetterSetter.aj:24

AspectJ Development Tools for Eclipse (AJDT) 进一步简化了 Erin 的工 作。错误和警告将随同其他编译器错误和警告一并列出,如图 1 所示:

图 1. 所声明的错误与编译器错误一并列出

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

在出问题的代码处,最左侧的页面空白处将显示一个带有上下文菜单导航项 的 标记,从而使 Erin 可以跳转回错误声明处,如图 2 所示:

图 2. 从代码返回到错误声明处的引用

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

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

时间:2011-09-07 IBM Wes Isberg

Arnold 学会使用 GSetter 方面

Erin 的方面查找出了 Arnold 代码中的一些违规错误。通过 AspectJ 的向 后 和向前链接,Erin 可以选择更正代码或调整错误声明。根据检查,错误绝大多 数 都是违规字段,这些字段不应通过 setter 方法访问。由于 Arnold 非常喜爱切 入点,因此您教了他如何忽略违规字段,如清单 4 所示:

清单 4. 忽略违规字段

aspect CompanyGS extends GetterSetter {  protected pointcut withinTypes(): within(com.magickingdom..*)   && !get (volatile * *) && !set(volatile * *); }

Arnold 和 Erin 都非常高兴,但 Zed 指出 Arnold 必须理解改变局面的底 层 切入点。这可行吗?查看了其他方面后,Zed 问道:“谁理解 NoCallsIntoTestFromOutside 中的这个切入点?” 如清单 5 所示:

清单 5. 避免到测试包的引用

pointcut referToTestPackage():   call(* *..test..*.*(..)) || call(*..test..*.new(..))   || get(* *..test..*.*) || set(* *..test..*.*)   || get(*..test..* *) || set(*..test..* *)    || (staticinitialization(!*..test..*)     && staticinitialization(*..test..*+))   || call(* *(*..test..*, ..))   || call(* *(*, *..test..*, ..))   || call(* *(*, *, *..test..*))   || call(* *(.., *..test..*))   || execution(* *(*..test..*, ..))   || execution(* *(*, *..test..*, ..))    || execution(* *(*, *, *..test..*, ..))   || execution(* *(.., *..test..*))   ;

Arnold 试图解释,但 Erin 只是翻了一个白眼。问题在于:对库方面部署者 仅需了解很少相关内容这样的假设存在风险。Zed 询问是否能够通过错误声明

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