快速业务通道

AOP@Work:介绍AspectJ 5 - AspectJ中的Java 5支持和其他新特性抢鲜看 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
满足这个规范 。 execution(* process(..)) && args(List<String>) 永远不 会匹配,因为字符串列表永远不会传递给这样的方法,该方法期待得到扩展 Number 的东西的列表。 execution(* process(..)) && args (List<Number>) 可能 匹配,具体取决于实际传递的列表是数字列表、双 精度列表,还是浮点列表。

AOP@Work:介绍AspectJ 5 - AspectJ中的Java 5支持和其他新特性抢鲜看(9)

时间:2011-09-04 IBM Adrian Colyer

在后一种情况下,可能 做的工作就是在实际的参数上应用运行时测试,判断 它是不是 instanceof List<Number>。不幸的是,Java 5 实现泛型时采用 了一种叫做 擦除(erasure) 的技术 —— 被擦除的就是参数化类型的运行时类 型参数信息。在运行时,参数只被当作普通的 List(所谓参数的“原始”类型) 。

即使缺少必要的信息进行确定的决策,AspectJ 也必须决定这类切入点是否应 当匹配。在 Java 语言中对于这类情况有一种优先级:在把原始类型(例如 List )的实例传递给需要参数化类型(例如 List<Number>)的方法时,调用会 通过 Java 5 编译器传递,但是会生成一个“unchecked”警告,提示转换可能不 是类型安全的。

类似地,当 AspectJ 认为某个切入点可能匹配指定连接点,但是不能应用运 行时测试进行确定的时候,就会考虑对切入点进行匹配,而且 AspectJ 编译器会 提出一个“unchecked”警告,表示实际的匹配不能被检测。就像 Java 语言支持 @SuppressWarnings 注释,可以在成员中抑制未检测警告一样,AspectJ 支持 @SuppressAjWarnings 注释,可以用它对建议进行注释,以抑制从切入点匹配发 生的未检测警告。

执行连接点和泛型

在离开泛型主题之前,有一个要点需要考虑。回到 清单 10 中定义的 DataBucket 类,请注意不论用多少不同的类型参数去实例化 DataBucket 的实例 (如下所示),都只有一个 DataBucket 类:

DataBucket<Integer> myIntBucket = new DataBucket<Integer>(); DataBucket<String> myStringBucket = new DataBucket<String>(); DataBucket<Food> myFoodBucket = new DataBucket<Food>(); ...

它的含义就是,在 DataBucket 类的内部,没有返回 String、Integer 或 Food 实例的 getData 方法执行这样的东西。相反,只有一个 getData 方法执行 ,返回类型参数 T 的实例。所以可以这样编写,它匹配的方法执行,是在命名类 型 DataBucket 中返回 T 的 getData 方法,其中 T 是类型参数:

execution<T>(T DataBucket<T>.getData())

@AspectJ 注释

介绍了 AspectJ 5 的新发行版中最重要的 Java 5 语言特性之后,我现在把 重点转到一些没有显式地捆绑到 Java 5 的新特性上。其中最重要的一个是方面 声明的新的基于注释的风格,称作 @AspectJ 注释。在 AspectJ 5 中,可以用普 通的 Java 语法编写方面,然后对声明进行注释,这样,它们就可以由 AspectJ 的织入器解释。例如,在代码风格中,可以这样编写:

public aspect TransactionManager {  ...

在基于注释的风格中,可以这样编写:

@Aspect public class TransactionManager {  ...

AOP@Work:介绍AspectJ 5 - AspectJ中的Java 5支持和其他新特性抢鲜看(10)

时间:2011-09-04 IBM Adrian Colyer

随着 AspectJ 与 AspectWerkz 在 2005 年初的合并,@AspectJ 注释被添加 到 AspectJ 中。它们使得任何标准的 Java 5 编译器都可以处理 AspectJ 源代 码,而实际上任何从 Java 源代码起工作的工具都可以。在使用没有为操作 AspectJ 程序提供集成支持的 IDE 时(当然,这类环境也缺

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