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文件