自定义注解
eg:
/**
* 控制器实体参数注解
* @author ywj
* @date 2020/06/13
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({
ElementType.PARAMETER, ElementType.METHOD})
@Documented
public @interface EntityParam {
}
名词解释:
@Retention
功能:指明修饰的注解的生存周期,即会保留到哪个阶段。
RetentionPolicy: 这个枚举类型的常量提供了一个简单的分类,即注解的生存周期
public enum RetentionPolicy {
/**
* 注解只在源代码级别保留,编译时被忽略
*/
SOURCE,
/**
* 注解将被编译器在类文件中记录
* 但在运行时不需要JVM保留。这是默认的
* 行为.
*/
CLASS,
/**
*注解将被编译器记录在类文件中
*在运行时保留VM,因此可以反读。
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}
@Target
功能:指明了修饰的这个注解的使用范围,即被描述的注解可以用在哪里。
ElementType: 这个枚举类型的常量提供了一个简单的分类,即注解可以在那些地方可以使用
public enum ElementType {
/** 用于描述类、接口(包括注解类型) 或enum声明*/
TYPE,
/** 字段(包括枚举常量) */
FIELD,
/** 用于描述方法 */
METHOD,
/** 用于描述参数 */
PARAMETER,
/** 构造函数声明 */
CONSTRUCTOR,
/** 局部变量声明 */
LOCAL_VARIABLE,
/** 注解类型声明 */
ANNOTATION_TYPE,
/** 用于描述包 */
PACKAGE,
/**
* 类型参数声明
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* 使用的类型
*
* @since 1.8
*/
TYPE_USE
}
@Documented
功能:用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。