Java的注解原理

Java中注解的实现原理

什么是注解

注解(Annotation) 是一种元数据,它为代码提供了附加的信息,注解本身不直接影响代码的逻辑执行,但可以通过工具、编译器或运行时反射等机制对代码进行处理。

注解的定义方式

1
2
3
4
public @interface MyAnnotation {
    String value() default "default value";  // 带有默认值的元素
    int number();  // 没有默认值的元素
}

注解的目标对象

  • ElementType.TYPE:类、接口(包括注解类型)或枚举。
  • ElementType.FIELD:字段(包括枚举常量)。
  • ElementType.METHOD:方法。
  • ElementType.PARAMETER:方法参数。
  • ElementType.CONSTRUCTOR:构造方法。
  • ElementType.LOCAL_VARIABLE:局部变量。
  • ElementType.ANNOTATION_TYPE:注解类型。
  • ElementType.PACKAGE:包。

定义在 ElementType 枚举中,使用元注解@Target指定目标对象

注解的生命周期

  • RetentionPolicy.SOURCE:注解仅在源码中存在,编译时被丢弃。
  • RetentionPolicy.CLASS:注解存在于编译后的 .class 文件中,但运行时不可用。
  • RetentionPolicy.RUNTIME:注解在运行时可用,可以通过反射机制访问。

定义在 RetentionPolicy 枚举中,使用元注解@Retention指定生命周期

示例

1
2
3
4
5
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface JsonField {
    public String value() default "";
}
  • JsonField 注解的生命周期是 RUNTIME,也就是运行时有效。
  • JsonField 注解装饰的目标是 FIELD,也就是针对字段的。
  • 创建注解需要用到 @interface 关键字。
  • JsonField 注解有一个参数,名字为 value,类型为 String,默认值为一个空字符串。
最后更新于 2025-04-16 14:45 UTC
그 경기 끝나고 좀 멍하기 있었는데 여러분 이제 살면서 여러가
使用 Hugo 构建
主题 StackJimmy 设计