该篇文章主要做下注解的笔记,以免我经常忘记~
先给个demo
package com.nuofankj.springdemo.resource;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResourceConfig {
}
先从@Target说起,此处直接查看源码并加上注释
public enum ElementType {
/** 类, 接口 (包括注释类型), 或 枚举 声明 */
TYPE,
/** 字段声明(包括枚举常量) */
FIELD,
/** 方法声明(Method declaration) */
METHOD,
/** 正式的参数声明 */
PARAMETER,
/** 构造函数声明 */
CONSTRUCTOR,
/** 局部变量声明 */
LOCAL_VARIABLE,
/** 注释类型声明 */
ANNOTATION_TYPE,
/** 包声明 */
PACKAGE,
/**
* 类型参数声明
*/
TYPE_PARAMETER,
/**
* 使用的类型
*/
TYPE_USE
}
很明显@Target 这个枚举提供了一个简单的分类,即可能出现在Java程序中的位置。
接下来查看@Retention,同样查看源码
public enum RetentionPolicy {
/**
* 注释只在源代码级别保留,编译时被忽略
*/
SOURCE,
/**
* 注释将被编译器在类文件中记录但在运行时不需要JVM保留。这是默认的行为
*/
CLASS,
/**
*注释将被编译器记录在类文件中,运行时保留VM,因此可以反读。
*/
RUNTIME
}
意思便是:RetentionPolicy这个枚举类型的常量描述了保留注释的各种策略,即指定注释要保留多长时间。
最后一个是@Documented,这个表明这个注解javadoc是记录的。即如果一个类型声明被注释了文档化,它的注释成为公共API的一部分。
网友评论