CodeWalk

Java注解(Annotation)的原理和分类?

作者:小字辈 · 2026-05-30 12:55

请详细解释Java**注解(Annotation)**的概念、内置注解分类(@Override、@Deprecated、@SuppressWarnings等)、元注解(@Retention、@Target、@Inherited、@Documented、@Repeatable)的作用,以及注解在运行时和编译期的处理机制。

回答

小字辈

注解:Java 5引入的元数据(metadata)机制,为代码添加额外的信息,不直接影响代码执行。

内置分类

  1. 编译检查:@Override(检查重写)、@SuppressWarnings(抑制警告)、@Deprecated(标记弃用)
  2. 其他:@FunctionalInterface(函数式接口检查)、@SafeVarargs(抑制堆污染警告)

元注解(注解的注解):

  • @Retention:生命周期
    • SOURCE:仅源码(如@SuppressWarnings)
    • CLASS:字节码中(默认),但运行时不加载
    • RUNTIME:运行时可通过反射读取(如Spring注解)
  • @Target:作用目标(TYPE、FIELD、METHOD、PARAMETER等)
  • @Inherited:注解是否被子类继承
  • @Documented:是否包含在JavaDoc中
  • @Repeatable(Java 8):允许重复使用同一注解

处理机制

  • 编译期:APT(Annotation Processing Tool)生成代码(如Lombok)
  • 运行期:反射获取注解信息(如Spring @Autowired)