一、Java 注解
Annotation(注解)是一个接口,程序可以通过反射获取指定程序中元素的 Annotation 对象,然后通过该 Annotation 对象来获取注解中的元数据进行。
Annotation 本质上只是一个元素的信息标注,相关功能的实现需要借助 Java 的反射机制来实现。
二、四种标准元注解
元注解(meta-annotation):用来标注注解的注解。
Java5.0 定义了四个标准的元注解(meta-annotation),他们用来提供对其他 注解(annotation)类型进行说明,如下
- @Target
修饰对象的范围 - @Retention
注解被保留的时间长短 - @Documented
将 API 文档化成 javadoc - @Inherited
注解能够被继承
@Target
@Target 用来描述当前注解能够在那些位置进行标注。相关的配置信息在 ElementType
中,部分如下
- TYPE
表示注解能够在 类、接口、Annotation类型、枚举上进行标注 - FIELD
表示注解能够在 类型成员上进行标注 - METHOD
表示注解能够标注在方法上
更多的参考 ElementType
@Retention
@Retention 注解保留的时间长短,换句话说就是注解的一个生命周期,取值如下( RetentionPolicy
):
- SOURCE
在源文件中有效,即注解在源文件中有保留 - CLASS
在 class 文件中有效,即注解在 class 中有保留 - RUNTIME
在运行时有效,即运行时注解还有保留
@Documented
在使用 javadoc 工具生成文档时,默认是没有把注解归入进去的,不过增加该注解,能够使得其在生成 javadoc 的文档时被纳入到文档中
@Inherited
表示被标注的注解,在标注了指定类时,类的注解能够被继承。
通俗一点就是,假设现在有一个注解 XXXAnotation ,该注解标注了 @Inherited
。
现在有一个 User 和SuperUser,User 是 SuperUser 的父类,此时如果 User 上标注了 XXXAnotation,因为这个注解是可以被继承的,所以其子类 SuperUser 也具有该注解。