@Target
@Target用途
一个没有@Target限制的注解可以应用在任意声明中,但不能用于类型参数和类型用途
@Target的元素类型
元素类型 | 应用于 |
---|---|
TYPE | 类(包括enum)和接口(包括注解类型) |
FIELD | 实例变量(包括enum常量) |
METHOD | 方法 |
PARAMETER | 方法或者构造函数参数 |
CONSTRUCTOR | 构造函数 |
LOCAL_VARIABLE | 局部变量 |
ANNOTATION_TYPE | 注解类型声明 |
PACKAGE | 包 |
TYPE_PARAMETER | 局部变量 |
TYPE_USE | 一个类型的用途 |
@Retention
@Retention用途
元注解 @Retention 用于指定可以从哪里访问注解
- RetentionPolicy.SOURCE 注解对源代码处理器可见,但不包含在类文件里
- RetentionPolicy.CLASS 注解包含在类文件里,但虚拟机不会加载它们,这是默认行为
- RetentionPolicy.RUNTIME 注解在运行时可见,并且可以通过反射API访问
标准注解
注解接口 | 应用于 | 目的 |
---|---|---|
Override | 方法 | 检测该方法重载了一个父类方法 |
Deprecated | 所有声明 | 标记该项已被弃用 |
SuppressWarnings | 除了包之外的所有声明 | 抑制一个给定类型的警告 |
SafeVarargs | 方法和构造函数 | 断言不定长参数可以安全使用 |
FunctionalInterface | 接口 | 将接口标记为函数式接口(带单个抽象方法) |
PostConstruct PreDestroy | 方法 | 在构造函数之后或者在删除一个被注入对象之前,应该立刻调用该方法 |
Resource | 类和接口、方法、域 | 用于类或者接口时,标记为用在某处的资源。用于方法或者域时,标记为依赖注入 |
Resources | 类和接口 | 指定一个资源数组 |
Gentrated | 所有声明 | 将注解标记为工具产生的源代码 |
Target | 注解 | 指定应用该注解的位置 |
Retention | 注解 | 指定在哪里使用该注解 |
Documented | 注解 | 指定该注解应该被包含在被注解项的文档中 |
Inherited | 注解 | 指定该注解被子类继承 |
Repeatable | 注解 | 指定该注解可以在同一项上应用多次 |