自定义注解与反射读取注解
- 定义新的 Annotation 类型使用 @interface 关键字
- Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型. 我们称为配置参数。类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型、以上所有类型的数组
- 可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用 default 关键字
- 如果只有一个参数成员,建议使用参数名为value
- 如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认值。格式是“参数名 = 参数值”,如果只有一个参数成员,且名称为value,可以省略“value=”
- 没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数据 Annotation
注意:自定义注解必须配上注解的信息处理流程才有意义。
8.2.4 元注解
Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。
(1)@Target
(2)@Retention
(3)@Documented
(4)@Inherited
在java.lang.annotation包
1、@Target
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方
2、@Retention
@Retention定义了该Annotation被保留的时间长短
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
@Rentention 包含一个 RetentionPolicy 类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值:
取值(RetentionPoicy)有:
SOURCE:在源文件中有效(即源文件保留)
CLASS:在class文件中有效(即class保留) 这是默认值
RUNTIME:在运行时有效(即运行时保留)当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释
3、@Documented
Documented 注解表明这个注解应该被 javadoc工具记录。默认情况下,javadoc是不包括注解的,但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理。
4、@Inherited
允许子类继承父类中的注解
文章来源:尚硅谷Java培训