目录
注解的定义:
注解是特殊的接口,继承Annotation
注解的实现类是基于动态代理,核心类AnnotationInvocationHandler
注解类可以实例化成AnnotationType,public static AnnotationType getInstance(Class<? extends Annotation> var0)
注解的特性
- 继承性
- 被@Inherited修饰的注解,如果修饰父类,则子类可以通过反射获取。
- 重复性
- 被@Repeatable修饰的注解,可以对同一目录重复使用。
注解的作用范围
实现AnnotatedElement接口的所有类及注解本身
注解实例化原理
Class<?> clazz = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
Map<String, Object> params = new HashMap<>();
params.put("name", "张三");
params.put("lookup", "29");
Constructor constructor = clazz.getDeclaredConstructors()[0];
constructor.setAccessible(true);
InvocationHandler instance = (InvocationHandler) constructor.newInstance(Resource.class, params);
Resource annInstance = (Resource) Proxy.newProxyInstance(AppAAA.class.getClassLoader(), new Class[]{Resource.class}, instance);
System.out.println(annInstance.name());
System.out.println(annInstance.lookup());