参考文献:《Java疯狂讲义》(第三版)
JDK的元Annotation(Meta Annotation)
使用@Retention
@Retention只能用于修饰Annotation定义,用于指定被修饰的Annotation可以保留多长时间,@Retention包含一个RetentionPolicy类型的value成员变量,所以使用@Retention时必须为该value成员指定变量指定值。
value成员变量:
1、RetentionPolicy.CLASS:编译器把Annotation记录在class文件里。当运行Java程序时,JVM不可获取Annotation信息。这是默认值。
2、RetentionPolicy.RUNTIME:编译器将把Annotation记录在class文件中。当运行Java程序时,JVM也可获取Annotation信息,程序可以通过反射获取该Annotation信息。
3、RetentionPolicy.SOURCE:Annotation只保留在源代码,编译器直接丢弃这种Annotation。
如果需要通过反射获取注解信息,就需要把value属性值为RetentionPolicy.RUNTIME的@Retention。
@Target
用于指定被修饰的Annotation能用于修饰哪些程序单元。
@Documented
用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档,如果定义Annotation类使用了@Docunmented修饰,则所有使用该Annotation修饰的程序元素的API文档中将会包含该Annotation说明。
@Inherited
指定被它修饰的Annotation将具有继承性——如果某个类使用了@Xxx注解修饰,则其子类将自动被@Xxx修饰。