Java注解系统学习与实战

背景

为什么要再次梳理一下java注解,显而易见,因为重要啊。也是为研究各大类开源框架做铺垫,只有弄清楚Java注解相关原理,才能看懂大部分框架底层的设计。

缘起

注解也叫做元数据,是JDK1.5版本开始引入的一个特性,用来对代码进行标记说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解修饰。其本身不包含任何业务逻辑。

一般注解大类分为三种:

  • JDK自带的相关注解
  • 自定义的注解
  • 第三方的(例如相关的框架中的注解)

注解三步走:定义、配置、解析

  • 定义:定义标记
  • 配置:把标记打到需要用到的代码中
  • 解析:在编译器或运行时检测到标记,并进行特殊操作

元注解

什么是元注解?元注解的作用就是负责注解其他注解。元注解有以下五种:

  • @Retention:指定其所修饰的注解的保留策略
  • @Document:该注解是一个标记注解,用于指示一个注解将被文档化
  • @Target:用来限制注解的使用范围
  • @Inherited:该注解使父类的注解能被其子类继承
  • @Repeatable:该注解是Java8新增的注解,用于开发重复注解

@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

你可能感兴趣的:(java,java,学习,jvm,架构,面试)