如何自定义注解?什么是APT?
请说明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):
- javac编译期的注解处理器
- 继承AbstractProcessor,实现process()方法
- javax.annotation.processing包支持
- META-INF/services注册处理器(或Google AutoService)
- 在编译时生成Java源文件、资源文件等
Lombok:利用APT在编译期修改AST(抽象语法树),生成getter/setter/toString/Builder等代码。这本质上是编译期元编程。
运行时:通过Class.getAnnotation()、Field.getAnnotation()等反射方法获取RUNTIME级别的注解。