注解
概述
- 就是 Java 提供了一种元程序中的元素,关联任何信息和任何元数据(metadata)的途径和方法
- Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的 Annotion 对象,然后通过 Annotion 对象来获取注解里面的元数据
元数据
- 元数据:描述数据的结构信息
- 被用来生成其它的文件,或在运行时获取运行代码的描述信息
- 作用:
- 生成文档
- 跟踪代码依赖性,实现替代配置文件功能
- 在编译时进行格式检查
元注解
- 负责注解其他注解
- 1.@Target:注解使用范围
- 2.@Retention:描述注解的生命周期
- 3.@Documented:表明会否被文档化
- 4.@Inherited:表明继承
自定义注解
声明格式
- public @interface 注解名 {定义体}
注解参数
- 注解里面的每一个方法实际上就是声明了一个配置参数
- 修饰符
- 只能用 public 或默认(default)这两个访问权修饰
- 参数类型
- 基本数据类型(int,float,boolean,byte,double,char,long,short)
- String 类型
- Class 类型
- enum 类型
- Annotation 类型
- 以上所有类型的数组
- 方法参数
- 不允许有参数
- 默认值
- 可以有默认值,用default来声明
注解处理器
- 概述
- Java 使用 Annotation 接口来代表程序的注解,该接口是所有 Annotation 类型的父接口
- Java 在 java.lang.reflect 包下新增了 AnnotatedElement 接口,该接口代表程序中可以接受注解的程序元素,该接口主要有如下几个实现类:
- Class:类定义
- Constructor:构造器定义
- Field:累的成员变量定义
- Method:类的方法定义
- Package:类的包定义
- java.lang.reflect 包扩充了读取运行时 Annotation 信息的能力。当一个 Annotation 类型被定义为运行时的 Annotation 后,该注解才能是运行时可见,
- 当 class 文件被装载时被保存在 class文件中的 Annotation 才会被虚拟机读取
- 程序通过反射获取了某个类的 AnnotatedElement 对象之后,程序就可以调用该对象的如下四个个方法来访问 Annotation 信息
- 方法 1: (T extends Annotation T) getAnnotation(Class annotationClass): 返回指定类型的注解
- 方法 2:Annotation[] getAnnotations():返回该程序元素上存在的所有注解
- 方法 3: boolean is AnnotationPresent( annotationClass):判断是否包含指定类型的注解
- 方法 4:Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注解,该方法将忽略继承的注解。