1. 概念
注解:提供一种为程序元素设置元数据的方法
元数据:关于数据的数据
元数据作用:
- 编写文档:通过代码里标识的元数据生成文档
- 代码分析:通过代码里标识的元数据对代码进线分析
- 编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查
2. 元注解
作用:负责注释其他注解
2.1 @Target
作用:声明该注解可以用于什么地方,通过正确设置@Target,编译器可以在编译时检查注解是否被应用到了正确的地方
ElementType参数:
ElementType.TYPE:类、接口(包括注解类型自身)、或者枚举声明ElementType.FIELD:属性字段、枚举常量ElementType.METHOD:方法(不包括构造方法)ElementType.PARAMETER:方法或构造方法中的参数ElementType.CONSTRUCTOR:构造方法ElementType.LOCAL_VORIABLE:局部变量声明ElementType.ANNOTATION_TYPE:其他注解类型声明ElementType.PACAKAGE:包声明ElementType.TYPE_PARAMETER:类型参数(泛型)
2.2 @Retention
作用:表示需要在什么级别保存该注释信息
RententionPoicy参数:
RententionPoicy.SOURCE:保存在源代码中,编译时不保存RententionPoicy.CLASS:编译时保存class字节码文件中,运行时装载进JVM时不保存RententionPoicy.RUNTIME:JVM运行时保存,可以通过反射机制读取注释信息
2.3 @Documented
作用:用于标记另一个注解,使注解在使用javadoc工具生成API文档时会被包含进去
2.4 @Inherited
作用:允许子类继承父类中的注解
3. 注解操作
接口:通过java.lang.reflect.AnnotatedElement接口操作
实现类:Class、Constructor、Field、Method、Package
方法:
getAnnotation(Class<T> annotationClass):返回该程序元素上存在的指定类型的注解,不存在则返回nullgetAnnotations():返回该程序元素上存在的全部注解getDeclaredAnnotations():返回直接存在于此程序元素上的所有注解(明确声明的注解,不包括超类)
4. 总结
注解是从jdk5.0开始引入的一种元程序信息,提供了一种安全的、形式化的元数据机制,用于向java程序中插入信息。这些信息可以被编译器或其他工具解析,生成文档或额外的代码。结合反射,可以通过反射api获取注解信息,然后在程序运行时做相应的处理,在spring框架中就大量使用注解进行依赖注入。还可以简化配置,代替xml等外部配置文件。