Spring-自定义注解@Interface

237 阅读1分钟

声明注解类:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TestInterface {

    /**
     * 用于配置接口名称,以便打印入参、返回值
     */
    String value() default "";

}

几个注解说明

Targer的value属性,是ElementType的枚举,指的是作用在哪里

public enum ElementType {
    /** 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
}

Retention的value属性,是RetentionPolicy的枚举值,指的是注解信息的有效范围

public enum RetentionPolicy {
/**
 * Annotations are to be discarded by the compiler.
 */
SOURCE,

/**
 * Annotations are to be recorded in the class file by the compiler
 * but need not be retained by the VM at run time.  This is the default
 * behavior.
 */
CLASS,

/**
 * Annotations are to be recorded in the class file by the compiler and
 * retained by the VM at run time, so they may be read reflectively.
 *
 * @see java.lang.reflect.AnnotatedElement
 */
RUNTIME
}

SOURCE修饰的注解:表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中

CLASS修饰的注解:表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候

RUNTIME修饰的注解:表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时。所以它能够通过反射调用,所以正常运行时注解都是使用的这个参数

引用

在方法上加上这个注解

@TestInterface("测试")
@PostMapping("/Test")
public VO test() {
    XXXX
}

这样一个自定义注解就完成了。