Annotation(注解)是JDK5.0及以后版本引入的。它的作用是修饰编程元素。什么是编程元素呢?例如:包、类、构造方法、方法、成员变量等。
元注解就是修饰注解的注解。
注解是JDK 5.0推出来的,这部分JDK源码的作者是:Joshua Bloch(《Effective Java》的作者)。
注解的定义
(1)以@interface关键字定义
(2)注解包含成员,成员以无参数的方法的形式被声明。其方法名和返回值定义了该成员的名字和类型。
(3)成员赋值是通过@Annotation(name=value)的形式。
(4)注解需要标明注解的生命周期,注解的修饰目标等信息,这些信息是通过元注解实现。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Controller {
ElementType value();
}
分析:
元注解@Documented
Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的.
元注解@Retention定义注解的生命周期,成员value的值为RetentionPolicy.RUNTIME。
RetentionPolicy.RUNTIME 被编译器写在class文件中,jvm载入。
RetentionPolicy.CLASS 被编译器写在class文件中,jvm加载的时候抛掉。默认声明周期。
RetentionPolicy.SOURCE 保留在源文件,编译过程中被编译器直接抛掉。
元注解@Target(ElementType.ANNOTATION_TYPE) 拥有这个注解的注解,就是元注解。
(1)TYPE:指的是在类,接口(包括注解)或者enum上使用的注解。
(2)FIELD:指的在field属性,也包括enum常量使用的注解。
(3)METHOD:指的是在方法声明上使用的注解。
(4)PARAMETER:指的是在参数上使用的注解,
(5)CONSTRUCTOR: 指的是在构造器使用的注解。
(6)LOCAL_VARIABLE:指的是在局部变量上使用的注解。
(7)ANNOTATION_TYPE:指的是在注解上使用的元注解
(8)PACKAGE:指的是在包上使用的注解。
成员名称为value,类型为ElementType[]。
来源:oschina
链接:https://my.oschina.net/u/2272177/blog/760016