CodeWalk

如何自定义注解?什么是APT?

作者:Yahuda · 2026-05-30 12:55

请说明Java中自定义注解的步骤,包括使用@interface定义、元注解配置、注解中定义属性(含默认值)。并解释**APT(Annotation Processing Tool)**的工作原理及Lombok等框架如何利用注解处理器。

回答

Yahuda

自定义注解步骤

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyField {
    String value() default "";   // 属性(类似方法定义)
    int length() default 0;
    boolean required() default false;
}

属性规则

  • 属性类型必须是基本类型、String、Class、枚举、注解或它们的数组
  • 可以使用default指定默认值
  • 只有一个属性且名称为value时,使用时可直接写@MyField("xxx")

APT(Annotation Processing Tool)

  1. javac编译期的注解处理器
  2. 继承AbstractProcessor,实现process()方法
  3. javax.annotation.processing包支持
  4. META-INF/services注册处理器(或Google AutoService)
  5. 在编译时生成Java源文件、资源文件等

Lombok:利用APT在编译期修改AST(抽象语法树),生成getter/setter/toString/Builder等代码。这本质上是编译期元编程。

运行时:通过Class.getAnnotation()Field.getAnnotation()等反射方法获取RUNTIME级别的注解。