java 中的 Annotation 注解
什么是注解
- Annotation 是从JDK5.0 开始引入的新技术
- 作用1: 可以被程序读取,列如@Value 通过反射使用该注解读取配置文件信息
- 作用2: 本身不是程序,和注释差不多. 如: @Override, @Deprecated 内置注解
- Annotation 格式以 @注解命名成 在代码中存在,还可以添加一些参数,如: @RequestMapping(value = “/add”, method = RequestMethod.POST)
- Annotation 可以附加在 package, class, method,field 等上面,相当于给他们添加了额外的辅助信息,可以通过反射对这些元数据的访问
元注解
-
元注解的作用就是负责解释注解其他注解,java中定义了4个标准的meta-annotation 类型,他们被用来提供对其他annotation类型说明
-
这些类型的注解和他们所支持的类型都在java.lang.annotation 包中可以找到
-
@Target
-
用于描述注解的使用范围 (被描述的注解可以用在什么地方)
-
@Target(ElementType.TYPE) 接口、类、枚举、注解
-
@Target(ElementType.FIELD) 字段、枚举的常量
-
@Target(ElementType.METHOD)方法
-
@Target(ElementType.PARAMETER)方法参数
-
@Target(ElementType.CONSTRUCTOR)构造函数
-
@Target(ElementType.LOCAL_VARIABLE)局部变量
-
@Target(ElementType.ANNOTATION_TYPE)注解
-
@Target(ElementType.PACKAGE)包
-
@Retention
-
表示需要在什么级别保存注解信息,用于描述注解的声明周期
-
RetentionPolicy.SOURCE:这种类型的Annotation只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含
-
RetentionPolicy.CLASS:这种类型的Annotation编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得
-
RetentionPolicy.RUNTIME:这种类型的Annotation将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用
-
@Document
-
说明该注解将被包含在javadoc中
-
@Inherited
-
说明子类可以继承父类中的注解
自定义注解
- 使用 @interface 自定义注解时候, 自动继承了 java.lang.annotation,Annotation 接口
- @interface 声明一个注解的格式: public @interface 注解名称 {定义内容}