Java核心知识(二):注解

61 阅读2分钟

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):返回该程序元素上存在的指定类型的注解,不存在则返回null
  • getAnnotations():返回该程序元素上存在的全部注解
  • getDeclaredAnnotations():返回直接存在于此程序元素上的所有注解(明确声明的注解,不包括超类)

4. 总结

注解是从jdk5.0开始引入的一种元程序信息,提供了一种安全的、形式化的元数据机制,用于向java程序中插入信息。这些信息可以被编译器或其他工具解析,生成文档或额外的代码。结合反射,可以通过反射api获取注解信息,然后在程序运行时做相应的处理,在spring框架中就大量使用注解进行依赖注入。还可以简化配置,代替xml等外部配置文件。