AOP@Work: AOP和元数据:完美的匹配,第1部分 - 编程入门网
例如,Javadoc 规范使您可以在与程序元素相关 联的备注中指定注释。其他一些元数据功能则使用单独的文档(通常是 XML 文档 )表示元数据。例如,EJB 部署描述符指定企业 bean 的额外特性。与 Javadoc 功能不同,这种方式将程序元素与元数据松散地结合,不利的方面是,它需要开 发人员修改多处描述同一元素的地方。
Java 元数据功能增加了新的语言支持,以便允许元数据声明注释类型和注释 (annotate)程序元素。它还使得在类文件中以源代码级别保留元数据、并在运 行时由保持(retention)策略控制成为可能。 元数据的供应者可以使用一种以横切(crosscutting)方式附加某种注释、而 不是向多个元素单独提供注释的功能。由于这种注释的横切本性,用 AOP 提供它 们是很好的一种方法。我将在本文后面详细介绍这种功能的细节。 元数据功能的选择会影响表示元数据的方式,但是将附加数据与程序元素相关 联的基本想法对所有元数据功能而言是相同的。 消费元数据 在元数据注释中创建一些值是为了消费元数据。元数据可以有不同的消费方式 ,理解这些用法会帮助理解 AOP 与元数据的结合。下面的用例有助于读者理解如 何在 AOP 实现中消费为非 AOP 目的提供的注释。 代码生成 代码生成也许是使用元数据的最熟悉的方式。使用类似 XDoclet 的工具,可 以消费在 Javadoc 标签中指定的注释,从而生成像 XML 文档或者 Java 代码这 样的人工内容。生成的代码又会影响所注释元素的运行时行为。一个支持元数据 功能的新 XDoclet 版本已经开发出来了。命令行工具 apt (注释处理工具), 作为 Java 2 SDK 5.0 发布的一部分,也提供了一种通过编写插件程序处理注释 的方法。例如,一个最近发布的契约增强工具 Contract4J 使用 apt 生成某些方 面,以增强契约式设计(DBC)的契约。 程序式行为修改 标准的元数据功能提供了让注释在运行时可用的方法。它还使您可以以编程方 式利用反射访问注释实例。然后可以像其他对象一样,用注释实例修改程序的行 为。这种程序式的消费还可以让程序员跳过应用程序的代码生成例程,生成的代 码只允许读取在注释中编码的信息。 框架消费 元数据常常用于协助程序元素与框架或者 EJB、EMF 和 TestNG 这样的工具之 间的通信。框架本身可以选择使用代码生成、反射访问或者将某种逻辑应用到执 行中的 AOP。在 EJB 3.0 中,注释的建议用法,如 @Remove 和 @Session,将告 诉框架程序元素的作用。Eclipse Modeling Framework 使用注释(当前表示为 Javadoc 标签)创建 UML 模型和 XML 持久化支持。在工具方面,(比如) TestNG 使用元数据在测试用例与测试执行工具之间通信。 语言扩展 对元数据的这种使用扩展了底层编程语言和编译器。将语义属性与元数据相关 联意味着编译的类可以与没有它们的类具有不同的结构和行为(请参阅 参考资料 提供的对这一主题的进一步讨论)。最近宣布的 Pluggable Annotation Processing API(JSR 269)会带来一种处理这种注释的标准方法。使用元数据扩 展 Java 语言能带来强大功效,但又危险:一方面,注释使我们可以不用修改核 心语言就可在 Java 语言中添加新功能,使核心语言成为一种开放式语言,在最 好的情况下,有原则的扩展会克服原语言中的一些限制。另一方面,非标准的注 释、特殊注释或者不一致的注释会带来难以理解的代码。 顺便说一下,在纯面向对象的语言中启用 AOP 是使用元数据进行语言扩展的 一个例子。AspectWerkz 和 JBoss AOP 使用元数据将类的语义转换为一个方面、 将数据字段转换为一个切入点、将方法转换为一个通知,等等。AspectJ 5 同样 也将支持 @AspectJ 语法,这是 AspectJ 与 AspectWerkz 项目合并的结果。请 参阅参考资料,以了解更多关于不同 AOP 实现和 Java |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |