前置知识: Java

注解处理器

00:00
1 min Advanced 2026/6/14

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:数据库访问代码生成

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式