注解的本质:所有的注解类型都继承自这个普通的接口(Annotation)
如@Override
public interface Override extends Annotation{}
Annotation.java注解本质上是继承了 Annotation 接口的接口,而当你通过反射,也就是我们这里的 getAnnotation 方法去获取一个注解类实例的时候,其实 JDK 是通过动态代理机制生成一个实现我们注解(接口)的代理类。分析下是如何使用动态代理的:
Test Method.getAnnotation()super.getAnnotation(var1);调用父类Executable的getAnnotation()方法,其中declaredAnnotations()返回的是Map,
Executable.getAnnotation() Executable.declaredAnnotations() AnnotationParser.parseAnnotations() AnnotationParser.parseAnnotations2() AnnotationParser.parseAnnotation2() AnnotationParser.parseAnnotation2()接上张图 AnnotationParser.annotationForMap()至此,通过动态代理机制生成一个实现我们注解(接口)的代理类
反编译生成:
网友评论