Spring系列之常用注解

该篇文章主要做下注解的笔记,以免我经常忘记~

先给个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的一部分。

你可能感兴趣的:(Spring系列之常用注解)