Java四大元注解介绍
什么是元注解?
元注解就是注解到注解上的注解。它们被用来提供对其它 annotation类型作说明。
Java5.0定义的元注解: @Retention
、@Documented
、@Target
、@Inherited
,这些类型和它们所支持的类在java.lang.annotation包中可以找到。如图所示:
接下来我们看一下每个元注解的作用和相应分参数的使用说明。
@Documented
@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。
@Retention
Retention 的英文意为保留期的意思。当 @Retention
应用到一个注解上的时候,它解释说明了这个注解的的存活时间。
取值有如下三个:
SOURCE::注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
CLASS: 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
RUNTIME: 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
@Target
Target 是目标的意思,@Target
指定了注解运用的地方。当一个注解被 @Target
注解时,这个注解就被限定了运用的场景。
它有如下取值:
ANNOTATION_TYPE:可以给一个注解进行注解
CONSTRUCTOR:可以给构造方法进行注解
FIELD:可以给属性进行注解
LOCAL_VARIABLE:可以给局部变量进行注解
METHOD:可以给方法进行注解
PACKAGE:可以给一个包进行注解
PARAMETER:可以给一个方法内的参数进行注解
TYPE:可以给一个类型进行注解,比如类、接口、枚举
@Inherited
Inherited 是继承的意思,但是它并不是说注解本身可以继承,而是说@Inherited
注解了其他注解,其他再注解别人,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface A {}
@A
public class B {}
public class C extends B {}
注解 A被 @Inherited
修饰,之后类 B 被 A 注解,类 C 继承 B,类 C 也拥有 A 这个注解。