Pluggable Annotation Processing API:JDK6的新特性:插件式注解处理API
该特性支持在编译器对注解的处理,Pluggable Annotation Processing API的核心是Annotation Processor即注解处理器,一般需要继承抽象类javax.annotation.processing.AbstractProcessor
。注意,与运行时注解RetentionPolicy.RUNTIME
不同,注解处理器只会处理编译期注解,也就是RetentionPolicy.SOURCE
的注解类型,处理的阶段位于Java代码编译期间。
使用步骤
插件化注解处理API的使用步骤大概如下:
- 1、自定义一个Annotation Processor,需要继承
javax.annotation.processing.AbstractProcessor
,并覆写process方法。 - 2、自定义一个注解,注解的元注解需要指定
@Retention(RetentionPolicy.SOURCE)
。 - 3、需要在声明的自定义Annotation Processor中使用
javax.annotation.processing.SupportedAnnotationTypes
指定在第2步创建的注解类型的名称(注意需要全类名,"包名.注解类型名称",否则会不生效)。 - 4、需要在声明的自定义Annotation Processor中使用
javax.annotation.processing.SupportedSourceVersion
指定编译版本。 - 5、可选操作,可以通在声明的自定义Annotation Processor中使用
javax.annotation.processing.SupportedOptions
指定编译参数。
指定自定义Processor的方式:
如果使用IDEA的话,Compiler->Annotation Processors中的Enable annotation processing必须勾选。然后可以通过下面几种方式指定指定Processor。
- 1、直接使用编译参数指定,例如:javac -processor com.xxx.xxxProcessor Main.java。
- 2、通过服务注册指定,就是META-INF/services/javax.annotation.processing.Processor文件中添加自定义Processor全路径名称。
- 3、通过Maven的编译插件的配置指定如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<annotationProcessors>
<annotationProcessor>
club.throwable.processor.AnnotationProcessor
</annotationProcessor>
</annotationProcessors>
</configuration>
</plugin>
在编译打包前需要先确保自定义的Processor已经编译通过,否则编译将会报错,解决方式如下:
第一种是提前使用命令或者IDEA右键com.xxx.xxxProcessor对它进行编译;
第二种是把com.xxx.xxxProcessor放到一个独立的Jar包引入;
最后使用maven 编译项目,即可在target下找到自定义的处理过的class文件