注解可对类、接口、字段、方法参数、局部变量等进行标记。
元注解是Java API提供的注解,是用来定义注解的注解。元注解可以限制注解标注的位置@target,生命周期@Retenstion等。
@Target注解指明此注解用在哪个位置,如果不写默认是任何地方都可以使用。
由下图可以看出上面@Target(ElementType.ANNOTATION_TYPE)注解选择了作用在注解上
若要作用在方法上则如@Target(ElementType.METHOD)
@Target注解参数选择枚举类
public enum ElementType {
/**
用在类,接口上
*/
TYPE,
/**
用在成员变量上
*/
FIELD,
/**
用在方法上
*/
METHOD,
/**
用在参数上
*/
PARAMETER,
/**
用在构造方法上
*/
CONSTRUCTOR,
/**
用在局部变量上
*/
LOCAL_VARIABLE,
/**
用在注解上
*/
ANNOTATION_TYPE,
/**
用在包上,记录信息
*/
PACKAGE,
}
@Retention定义注解的生命周期(有效范围)。
由下图可以看出上面@Retention(RetentionPolicy.RUNTIME)注解选择生命周期是存在源码中、编译中、运行中。
public enum RetentionPolicy {
/**
* 注解只存在于Java源代码中,编译生成的字节码文件中就不存在。
*/
SOURCE,
/**
* 注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中就不存在,默认值选项。
*/
CLASS,
/**
* 注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取该注解。
*/
RUNTIME
}
自己定义一个注解
加入注解参数(可自定义),可以给默认值如下我加了默认值(default)
加入生命周期与作用范围
将自定义注解绑定到属性上,使用默认值或输入值
在这里我通过在自定义的User类中定义annotationInfo()方法中获取注解信息,一般情况下是在拦截器中进行的,并且要注意是通过使用加注解的地方如属性、方法等进行获取注解,我注解加在name属性上所以我通过name来获取注解,否则会出现空指针或获取不到值的情况。