Java注解處理器簡介

Java 注解處理器(Annotation Processor)是 Java 編譯時(shí)(Compile-time)處理注解的工具,屬于 JSR 269 規(guī)范的一部分。它允許開發(fā)者在代碼編譯階段掃描、解析和處理注解,生成額外的代碼或資源文件(如 .java、.class 或配置文件)。以下是核心要點(diǎn):
1、核心用途

  • 代碼生成
  • 編譯時(shí)檢查
  • 元數(shù)據(jù)處理
    2、關(guān)鍵組件
  • 定義注解
  • 繼承javax.annotation.processing.AbstractProcessor 類,并重寫process 方法
  • 新建文件META-INF/services/javax.annotation.processing.Processor,在文件中聲明處理器類
    3、實(shí)現(xiàn)步驟
  • 自定義注解
@Target({ElementType.TYPE}) //作用于類和接口
@Retention(RetentionPolicy.RUNTIME)//運(yùn)行時(shí)
public @interface MySelfAnnotation {
    String value() default "";
}
  • 注解處理器實(shí)現(xiàn)
@SupportedAnnotationTypes("com.example.MySelfAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_17)
public class MyAnnotationProcessor extends AbstractProcessor {
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
        for (TypeElement annotation : annotations) {
            // 處理被 @MySelfAnnotation 標(biāo)記的元素
            Set<? extends Element> elements = env.getElementsAnnotatedWith(annotation);
            for (Element element : elements) {
                
                //使用JavacTrees、TreeMaker 來處理代碼生成檢查等
                processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Found: " + element);
            }
        }
        return true; // 已處理,無需其他處理器介入
    }
}
  • 注冊注解處理器
    在 resources/META-INF/services/javax.annotation.processing.Processor 文件中寫入:
com.example.MyAnnotationProcessor

4、引用
將自定義的注解處理器編譯成jar包之后,就可以供其他模塊使用了。
其他模塊應(yīng)用之后,編譯是可能報(bào)出錯(cuò)誤

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project Mono: Compilation failure
[ERROR] 服務(wù)配置文件不正確, 或構(gòu)造處理程序?qū)ο骿avax.annotation.processing.Processor: com.topjoy.jdiff.jsr269.MyAnnotationProcessor Unable to get public no-arg constructor時(shí)拋出異常錯(cuò)誤

如果碰到這個(gè)錯(cuò)誤,就需要給maven打包的時(shí)候添加jvm參數(shù),具體詳見一下文章:http://www.itdecent.cn/p/10ac8835704f

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容