注解底层源码解析
注解
元注解
- @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: