注解处理器
00:00
Java注解处理器详解:Annotation Processor编译时生成代码。
1. 基本结构
@SupportedAnnotationTypes("com.example.MyAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_17)
public class MyProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {
// 生成代码
generateCode(element);
}
return true;
}
}
2. 注册处理器
META-INF/services/javax.annotation.processing.Processor
内容:com.example.MyProcessor
3. 代码生成
void generateCode(Element element) {
String className = element.getSimpleName() + "Generated";
JavaFileObject file = processingEnv.getFiler().createSourceFile(className);
try (PrintWriter writer = new PrintWriter(file.openWriter())) {
writer.println("package com.example;");
writer.println("public class " + className + " {");
writer.println(" public static void generated() {}");
writer.println("}");
}
}
4. 实际应用
- Lombok:生成 getter/setter/builder
- Dagger:依赖注入代码生成
- AutoValue:不可变值类生成
- Room:数据库访问代码生成