1.什么元注解?以及自定义注解需要的配置?
元注解就是负责注解其他注解的,或自定义注解时需要配置的相关信息。元注解有4个,分别是@Target、@Retention、@Documented、@Inherited
1、@Target 标注了自定义注解所修饰的目标
@Target(ElementType.TYPE) //作用于接口和类、枚举、和注解中
ElementType.FIELD //作用于字段和枚举的常量
ElementType.METHOD//作用于方法上
ElementType.PARAMETER//作用于方法参数上
ElementType.CONSTRUCTOR//作用于构造函数上
ElementType.LOCAL_VARIABLE//作用于局部变量上
ElementType.ANNOTATION_TYPE//作用于注解上
ElementType.PACKAGE//作用于包上面
2、@Retention 注解的保留策略
@Retention(RetentionPolicy.SOURCE)//注解仅存在于源码中,在class字节码文件中不包含
RetentionPolicy.CLASS //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得。
RetentionPolicy.RUNTIME //注解会在class字节码文件中存在,在运行时通过反射获得
3、@Documented 注解是否包含在javadoc中
4、Inherited 注解可以被继承
例子: 自定义的注解
@Documented
@Inherited
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Init
{
public String value() default “”;
}
2.注解中的值是怎样映射的?
1、获取类上面的注解:
例如:
@AnnotationTest02(getUserName=“zhangsan”)
public class AnnotationTest03 {
}
AnnotationTest02 anno = AnnotationTest03.class.getAnnotation(AnnotationTest02.class);
用类的class对象的getAnnotation(注解.class)方法来获取注解
**Method[] met = anno.annotationType().getDeclaredMethods();
通过注解来获取类中的方法
遍历方法每个方法为me,me.setAccessible(true);
System.out.println(me.invoke(anno, null));
获取注解中的值**
2、获取方法上的注解:
先通过类名.class获取class对象再获取该类中的方法并存储到方法列表中