Spring 自定义注解(导出的时候需要增加导出日志而写的)

`
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface ExpLog {
/**
* 日志描述信息
*/
String description() default "";
}

`
@Retention注解是指生命周期
按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

@Target注解
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
主要有:
/**用于描述类、接口(包括注解类型) 或enum声明 Class, interface (including annotation type), or enum declaration */
TYPE,

/** 用于描述域 Field declaration (includes enum constants) */
FIELD,

/**用于描述方法 Method declaration */
METHOD,

/**用于描述参数 Formal parameter declaration */
PARAMETER,

/**用于描述构造器 Constructor declaration */
CONSTRUCTOR,

/**用于描述局部变量 Local variable declaration */
LOCAL_VARIABLE,

/** Annotation type declaration */
ANNOTATION_TYPE,

/**用于描述包 Package declaration */
PACKAGE,

/**
 * 用来标注类型参数 Type parameter declaration
 * @since 1.8
 */
TYPE_PARAMETER,

/**
 *能标注任何类型名称 Use of a type
 * @since 1.8
 */
TYPE_USE
原文地址:https://www.cnblogs.com/jiazhihao/p/15131341.html