快速业务通道

使用 Java 6 API分析源码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
jects, in this case we have only // one file, TestClass.java Iterable<? extends JavaFileObject> compilationUnits1 =      fileManager.getJavaFileObjectsFromFiles("TestClass.java");

使用 Java 6 API分析源码(2)

时间:2011-07-28 Deepa Sobhana

诊断监听 器可以传递给 getStandardFileManager() 方法来生成任何非致命问题的诊断报告。在此代码段中,我们 传递 null 值,因为我们准备从此工具中收集诊断。有关传递给这些方法的其他参数的详细信息,请参阅 Java 6 API。StandardJavaFileManager 的 getJavaFileObjectsfromFiles() 方法返回与所提供的 Java 源文件相java JavaFileObject 实例。

下一步是创建 Java 编译任务,这可以使用 JavaCompiler 的 getTask() 方法来获得。这时,编译任 务尚未启动。此任务可以通过调用 CompilationTask 的 call() 方法来触发。创建和触发编译任务的代 码段如下所示。

// Create the compilation task CompilationTask task = compiler.getTask(null, fileManager, null,                      null, null, compilationUnits1); // Perform the compilation task. task.call();

假设没有任何编译错误,这将在目标目录中生成 TestClass.class 文件 。

注解处理:可插入的注解处理 API

众所周知,Java SE 5.0 引入了在 Java 类、字段、方法等元素中添加和处理元数据或注解的支持。 注解通常由构建工具或运行时环境处理以执行有用的任务,比如控制应用程序行为,生成代码等。Java 5 允许对注解数据进行编译时和运行时处理。注解处理器是可以动态插入到编译器中以在其中分析源文件和 处理注解的实用程序。注解处理器可以完全利用元数据信息来执行许多任务,包括但不限于下列任务。

注解可用于生成部署描述符文件,例如,对于实体类和企业 bean,分别生成 persistence.xml 或 ejb-jar.xml。

注解处理器可以使用元数据信息来生成代码。例如,处理器可以生成正确注解的企业 bean 的 Home 和 Remote 接口。

注解可用于验证代码或部署单元的有效性。

Java 5.0 提供了一个 注解处理工具(Annotation Processing Tool APT) 和一个相关联的基于镜像 的反射 API (com.sun.mirror.*),以处理注解和模拟处理的信息。APT 工具为所提供的 Java 源文件中 出现的注解运行相匹配的注解处理器。镜像 API 提供了源文件的编译时只读视图。APT 的主要缺点是它 没有标准化;比如,APT 是特定于 Sun JDK 的。

Java SE 6 引入了一个新的功能,叫做 可插入注解处理(Pluggable Annotation Processing) 框架 ,它提供了标准化的支持来编写自定义的注解处理器。之所以称为“可插入”,是因为注解处理器可以动 态插入到 javac 中,并可以对出现在 Java 源文件中的一组注解进行操作。此框架具有两个部分:一个 用于声明注解处理器并与其交互的 API -- 包 javax.annotation.processing -- 和一个用于对 Java 编 程语言进行建模的 API -- 包 javax.lang.model。

编写自定义注解处理器

下一节解释如何编写自定义注解处理器,并将其插入到编译任务中。自定义注解处理器继承 AbstractProcessor(这是 Processor 接口的默认实现),并覆盖 process() 方法。

注解处理器类将使用两个类级别的注解 @SupportedAnnotationTypes 和 @SupportedSourceVersion 来装饰。 SupportedSourceVersion 注解指定注解处理器支持的最新的源版本。 SupportedAnnotationTypes 注解指示此特定的注解处理器对哪些注解感兴趣。例如,如果处理器只需处 理 Java Persistence API (JPA) 注解,则将使用 @SupportedAnnotationTypes ("javax.persistence.*")。值得注意

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