Java注解处理器简介

Java 注解处理器(Annotation Processor)是 Java 编译时(Compile-time)处理注解的工具,属于 JSR 269 规范的一部分。它允许开发者在代码编译阶段扫描、解析和处理注解,生成额外的代码或资源文件(如 .java、.class 或配置文件)。以下是核心要点:
1、核心用途

  • 代码生成
  • 编译时检查
  • 元数据处理
    2、关键组件
  • 定义注解
  • 继承javax.annotation.processing.AbstractProcessor 类,并重写process 方法
  • 新建文件META-INF/services/javax.annotation.processing.Processor,在文件中声明处理器类
    3、实现步骤
  • 自定义注解
@Target({ElementType.TYPE}) //作用于类和接口
@Retention(RetentionPolicy.RUNTIME)//运行时
public @interface MySelfAnnotation {
    String value() default "";
}
  • 注解处理器实现
@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 标记的元素
            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包之后,就可以供其他模块使用了。
其他模块应用之后,编译是可能报出错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project Mono: Compilation failure
[ERROR] 服务配置文件不正确, 或构造处理程序对象javax.annotation.processing.Processor: com.topjoy.jdiff.jsr269.MyAnnotationProcessor Unable to get public no-arg constructor时抛出异常错误

如果碰到这个错误,就需要给maven打包的时候添加jvm参数,具体详见一下文章:https://www.jianshu.com/p/10ac8835704f

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容