admin管理员组

文章数量:1122852

@Target,@Retention,@Documented 注释的作用

@Target

target英文有目标、目的的意思。 @Target在java中是注释类。@Target作用于修饰的注释可以修饰的类型范围

@Target包含一个ElementType[]元素类型的数组。ElementType[]数组值value,表明Target修饰的注释可以修饰的类型范围。ElementType枚举值包含方法、属性、类等等。

ANNOTATION_TYPE: 注解只能修饰注解,不能修饰其他的东西

CONSTRUCTOR: 注解只能修饰构造方法

FIELD: 注解只能修饰属性(成员变量) 字段加解密注解标记拦截

LOCAL_VARIABLE: 注解只能修饰局部变量

METHOD: 注解只能修饰方法 对应的方法进行拦截

PACKAGE: 注解只能修饰包

PARAMETER: 注解只能修饰方法的参数

TYPE: 注解只能修饰类、接口、枚举

@Retention

作用是用来修饰注解的,一共有三种策略,定义在RetentionPolicy枚举中.

从注释上看:

source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;被编译器忽略

class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期

runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在

这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

那怎么来选择合适的注解生命周期呢?

首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。一般如果需要

在运行时去动态获取注解信息,那只能用 RUNTIME 注解;如果要 在编译时进行一些预处理操作,比如生成一些辅助

代码(如 ButterKnife) ,就用 CLASS注解;如果 只是做一些检查性的操作,比如 @Override 和

@SuppressWarnings,则 可选用 SOURCE 注解。

Documented:说明该注解将会被包含在JavaDoc文档中,我们常见的JDK帮助文档参考手册就是JavaDoc。

本文标签: TargetRetentionDocumented 注释的作用