快速业务通道

AOP@Work: AOP和元数据:完美的匹配,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
过分析每种系统 是如何处理捕获所有携带 @Transactional 注释实例的方法的切入点,可以了解 这种区别。在这些例子中,我将重点放在通过注释类型选择连接点上,然后我将 进一步解释在选择连接点时,其他会起作用的因素。

AspectJ5

AspectJ 5 语法(在编写本文的时候,它处于重要转折阶段)扩展了类型、方 法和字段的定义,以将注释作为签名的一部分加入,如下所示:

pointcut transactedOps(): execution(@Transactional * *.* (..));

如果想要在 AspectJ 5 中使用 @AspectJ 样式的定义,那么同样的切入点将 有如下定义:

@Pointcut("execution(@Transactional * *.*(..))") void transactedOps();

AspectWerkz

AOP@Work: AOP和元数据:完美的匹配,第1部分(6)

时间:2011-09-04 IBM Ramnivas Laddad

像大多数其他 AOP 工具一样,AspectWerkz 的切入点语法与 AspectJ 的语法 非常相像。下面代码段中的切入点声明使用了元数据类型的注释,而 XML 类型具 有同样的切入点表示:

@Expression("execution(@Transactional * *.*(..))") Pointcut transactedOps;

注意,AspectWerkz 使用元数据扩展 Java 编程语言,以便支持 AOP,如上述 例子所示。因此,AspectWerkz 出于两种目的使用元数据:扩展编程元素的语义 和实现基于元数据的横切。在上面的例子中,我着重分析了后一种用途。

JBoss AOP

JBoss AOP 在概念上与其他 AOP 系统没有很大区别,尽管它使用了不同的语 法。下面显示的切入点与其他例子相同,但是是用 JBos XML 语法表示的:

<pointcut name="transactedOps" expr="* *->@Transactional (..)"/>

可以看出,AOP 系统在根据附加到连接点上的元数据注释捕获它们的方式上没 有概念上的差别。

按注释属性选择

在选择连接点时,类型不是惟一要考虑的事项:还可以考虑属性。例如,下面 的切入点将捕获 value 属性设置为 RequiredNew 的、带有 @Transactional 注 释的所有方法:

execution(@Transactional(value==RequiredNew) *.*(..))

在编写本文的时候,还没有支持基于注释属性的切入点的 AOP 系统。相反, 每个系统都是根据通知中的动态决定来检查属性,并调用相应的逻辑(或者至少 使用 if() 切入点动态检查)。基于注释属性的切入点有某些好处,特别是对于 编译时检查和静态选择的效率。下一版本的 AOP 系统支持这种切入点。

公开注释实例

由于通知逻辑可以取决于元数据注释的类型 和实例属性,每一个注释实例都 必须使用与连接点上的其他上下文相同的方式公开上下文(例如,对象、方法参 数等)。AspectJ 5 扩展了现有的切入点,并增加了几个新的切入点来公开注释 。例如,下面的切入点收集与捕获的连接点相关联的、类型为 Transactional 的 注释实例:

pointcut transactedOps(Transactional tx)   : execution (@Transactional * *.*(..)) && @annotation(tx);

捕获注释实例后,可以用与任何其他上下文相同的方式使用注释实例。例如, 在下面的通知中,查询捕获的注释,以获得其属性:

Object around(Transactional tx) : transactedOps(tx) {   if (tx.value() == Required) {     ... implement the required transaction behavior   } else if(tx.value() == RequiredNew) {     ... implement the required-new transaction behavior   }   ... }

大多数 AOP 系统只使用反射 API 公开捕获的连接点上的注释实例,并且不允 许将注释绑定为连接点上下文。在这种情况下,可以查询表示已通知连接点的对 象来获得相关的注释。AspectJ 提供了反射访问和传统的连接点上下文。请参阅 参考资料,以了解更多关于 AspectJ 对公开注释

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