1、注解处理器介绍
注解处理器其实全称叫Pluggable Annotation Processing API,插入式注解处理器,它是对JSR269提案的实现。
它是怎么工作的呢?可以参考下图:
1.parse and enter:解析和输入,java编译器这个阶段会把源代码进行词法、语法分析,自动填充符号表,接着解析生成AST(抽象语法分析树);
2.annotation processing:注解处理器阶段,此时将调用注解处理器,这时候可以校验代码,生成新文件等等(处理完可以循环到第一步)
3.analyse and generate:分析和生成,此时前两步完成后,生成字节码(这个阶段进行了解糖,比如类型擦除)
2、代码实现(以下代码参考《深入理解Java虚拟机:JVM高级特性与最佳实践》)
2.1 新建一个工程
pom.xml添加内容如下:
2.2 新建一个注解处理器类,继承AbstractProcessor并且实现process方法
1.@SupportedAnnotationTypes:表示这个processor类要对什么注解生效
2.@SupportedSourceVersion:表示支持的java版本
3.annotations:被要求的注解,就是@SupportedAnnotationTypes对应的注解
4.roundEnv:存放着当前和上一轮processing的环境信息
5.TypeSpec这个可能有点没看懂是干嘛的,它是javaPoet中的一个类,javaPoet是java用于生成java文件的一款第三方插件很好 用,所以这里使用了这个类来生成java文件,实际上这里用java自带的PrintWriter等输入输出流也可以生成java文件,生成文件 有很多方式.javaPoet的链接.javaPoet使用指南.
6.Messager是用来打印输出信息的,System.out.println其实也可以;
7.process如果返回是true后续的注解处理器就不会再处理这个注解,如果是false,在下一轮processing中,其他注解处理器也会来处理改注解.
2.3 指定processor,META-INF/services/javax.annotation.processing.Processor 写好
com.*.*.NameCheckProcessor
3、使用注解处理器工程
3.1 pom.xml添加内容,先引入注解处理工程
3.2 执行mvn compile,控制台输出不符合规范的内容