import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*
* 其他的元注解
*
* @Documented:将当前注解中的属性的文档注释抽取都api中
* @Target:标记当前自定义注解/jdk内置注解能够使用操作的范围
* value属性的返回值:ElementType[] 枚举数组
* public enum ElementType {
*
* TYPE, 将当前这个注解标记类上
* FIELD, 将当前注解标记在成员变量
* METHOD,标记成员方法上
* }
*
* @Retention:标记当前自定义注解的保留阶段
* RetentionPolicy value();
*
* RetentionPolicy:枚举
* SOURCE,Java源代码(编译)
* CLASS,(产生字节码文件:需要通过反射加载类中的成员:Constructor,Field,Method)
* RUNTIME;(运行阶段) :考虑这个阶段!(开发者使用)
*
* @Inherited :标记当前这个注解,可以被子类继承!
*
*
* 如果使用自定义注解,就需要:@Retention/@Target这两个元注解
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME) // @MyAnno注解保留在运行阶段
@Documented
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD })
/**
* 这是我自定义一个注解类
*
* @author WL
*
*/
public @interface MyAnno {
}
@MyAnno
public class Student extends Person {
@MyAnno
Student s = new Student() ;
@MyAnno
public void show() {
}
}
@MyAnno
public class Person {
}