自定义注解:
本质:注解本质上就是一个接口,该接口默认继承 Annotation 接口。
public interface MyAnno extends java.lang.annotation.Annotation {}
格式:
元注解
public @interface 注解名 { 属性列表 }
属性:接口中的抽象方法,称为注解的属性
。
要求:
- 属性的返回值类型有下列取值:
- 基本数据类型
- String
- 枚举
- 注解
- 以上类型的数组
- 定义了属性,在使用时需要给属性赋值。
- 如果定义属性时,使用 default 关键字给属性默认初始化值,则使用时可以不给属性赋值,使用默认值。
- 如果只有一个属性需要赋值,并且属性的名称 value,则 value 可以省略,直接定义值即可。
- 数组赋值时,使用大括号
{}
包裹。当数组中只有一个值时,大括号可省略。
元注解:用于描述注解的注解
* @Target:描述注解能够作用的位置。
* @Retention:描述注解被保留的阶段(source、class、runtime 三个阶段)。
* 一般使用 runtime阶段,会被JVM虚拟机读到。
* @Documented:描述注解是否能被抽取到api 文档中。
* @Inherited:描述注解是否被子类继承。
在程序中使用(解析)注解:获取注解中设置的属性值
* 解析注解,获取注解定义位置的对象,类、方法、属性等。
* 获取添加的注解,根据使用方法的不同,可以获取固定的注解对象或所有的注解对象
* 其实就是在内存中生成了一个该注解接口的子类实现对象
* 调用注解对象中定义的抽象方法,获取返回值。
使用的本质:通过反射机制,及相关API 获取添加了注解的方法,并执行,案例:简单的自动测试框架的实现。