注解底层源码解析

注解

元注解

  • @Target:注解的作用目标
  • @Retention:注解的生命周期
    • RetentionPolicy.SOURCE:当前注解编译期可见,不会写入 class 文件
    • RetentionPolicy.CLASS:类加载阶段丢弃,会写入 class 文件
    • RetentionPolicy.RUNTIME:永久保存,可以反射获取
  • @Documented:注解是否应当被包含在 JavaDoc 文档中
  • @Inherited:是否允许子类继承该注解

内置三大注解

  • @Override(RetentionPolicy.SOURCE)
  • @Deprecated(RetentionPolicy.SOURCE)
  • @SuppressWarnings(RetentionPolicy.SOURCE)

原理

注解编译时会变成一个接口,并继承Annotation

注解底层源码解析

class.getAnnotation() 时序图:

注解底层源码解析

Class种注解存储元数据AnnotatinoData:

注解底层源码解析

getAnnotation()时序图对应代码:

注解底层源码解析


注解底层源码解析


注解底层源码解析


注解底层源码解析


注解底层源码解析


注解底层源码解析


注解底层源码解析

Annotation用JDK动态代理生成对象时的InvacationHandler:

注解底层源码解析


注解底层源码解析