为什么要再次梳理一下java注解,显而易见,因为重要啊。也是为研究各大类开源框架做铺垫,只有弄清楚Java注解相关原理,才能看懂大部分框架底层的设计。
注解也叫做元数据,是JDK1.5版本开始引入的一个特性,用来对代码进行标记说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解修饰。其本身不包含任何业务逻辑。
一般注解大类分为三种:
注解三步走:定义、配置、解析
什么是元注解?元注解的作用就是负责注解其他注解。元注解有以下五种:
@Retention注解
用于指定被修饰的注解可以保留多长时间,即指定JVM策略在哪个时间点上删除当前注解。
目前存在以下三种策略
| 策略值 | 功能描述 |
|---|---|
| Retention.SOURCE | 注解只在源文件中保留,在编译期间删除 |
| Retention.CLASS | 注解只在编译期间存在于.class文件中,运行时JVM不可获取注解信息,该策略值也是默认值 |
| Retention.RUNTIME | 运行时JVM可以获取注解信息(反射),是最长注解持续期 |
@Document注解
@Document注解用于指定被修饰的注解可以被javadoc工具提取成文档。定义注解类时使用@Document注解进行修饰,则所有使用该注解修饰的程序元素的API文档中将会包含该注解说明。
@Target注解
@Target注解用来限制注解的使用范围,即指定被修饰的注解能用于哪些程序单元。标记注解方式如下:@Target({应用类型1, 应用类型2,...})【@Target(ElementType.FIELD)】
枚举值的介绍如下:
| 枚举值 | 功能描述 |
|---|---|
| ElementType.Type | 可以修饰类、接口、注解或枚举类型 |
| ElementType.FIELD | 可以修饰属性(成员变量),包括枚举常量 |
| El |