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