使用 Java 6 API分析源码 - 编程入门网
的一点是,如果将支持的注解类型指定为 @SupportedAnnotationTypes("*"),即使没有任何注解,仍然会调用注解处理器。这允许我们有效利用建 模 API 以及 Tree API 来执行通用的源码处理。使用这些 API,可以获得与修改符、字段、方法但等有 关的大量有用的信息。自定义注解处理器的代码段如下所示:
使用 Java 6 API分析源码(3)时间:2011-07-28 Deepa Sobhana是否调用注解处理器取决于源码中存在哪些注解,哪些处理器配置为可用,哪些注解 类型是可用的后处理器进程。注解处理可能发生在多个轮回中。例如,在第一个轮回中,将处理原始输入 Java 源文件;在第二个轮回中,将考虑处理由第一个轮回生成的文件,等等。自定义处理器应覆盖 AbstractProcessor 的 process()。此方法接受两个参数: 源文件中找到的一组 TypeElements/ 注解。 封装有关注解处理器当前处理轮回的信息的 RoundEnvironment。 如果处理器声明其支持的注解类型,则 process() 方法返回 true,而不会为这些注解调用其他处理 器。否则,process() 方法返回 false 值,并将调用下一个可用的处理器(如果存在的话)。 插入到注解处理器中 既然自定义注解处理器已经可供使用,现在让我们来看如何作为编译过程的一部分来调用此处理器。 此处理器可以通过 javac 命令行实用程序或以编程方式通过独立 Java 类来调用。Java SE 6 的 javac 实用程序提供一个称为 -processor 的选项,来接受要插入到的注解处理器的完全限定名。语法如下:
其中 CodeAnalyzerProcessor 是注解处理器类,TestClass 是要处理的 输入 Java 文件。此实用程序在类路径中搜索 CodeAnalyzerProcessor;因此,一定要将此类放在类路径 中。 以编程方式插入到处理器中的修改后的代码段如下。CompilationTask 的 setProcessors() 方法允许 将多个注解处理器插入到编译任务中。此方法需要在 call() 方法之前调用。还要注意,如果注解处理器 插入到编译任务中,则注解处理首先发生,然后才是编译任务。不用说,如果代码导致编译错误,则注解 处理将不会发生。
如果执行上述代码,它将导致注解处理器在用于打印名称“TestClass” 的 TestClass.java 的编译期间启动。 访问抽象语法树:Compiler Tree API 抽象语法树(Abstract Syntax Tree)是将 Java 表示为节点树的来源 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |