java自定义注解

JDK元注解

@Retention定义注解的保留策略

@Retention(RetentionPolicy.SOURCE)
//注解只存在于源码中,在class字节码文件中不包含,通常用于编译检查等操作,比如@Override
@Retention(RetentionPolicy.CLASS)
//默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,用的少
@Retention(RetentionPolicy.RUNTIME)
//注解会在class字节码文件中存在,但在运行时可以通过反射获取到,常用的保留策略,比如@Autowired依赖注入

SOURCE -注解只保留在java文件中,当java文件编译成class文件时,注解将被抛弃
CLASS -注解被保留到class文件,但是jvm加载class文件时被抛弃,默认的生命周期
RUNTIME -注解不仅被保存到class文件中,jvm加载class文件之后,任然存在,常用的方式

@Target:指定注解可以修饰的元素类型(如方法、类、参数,变量等)

@Target(ElementType.TYPE) //接口、类
@Target(ElementType.FIELD) //属性
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE) //局部变量
@Target(ElementType.ANNOATION_TYPE) //注解
@Target(ElementType.PACKAGE) //包

注:可以指定多个位置,例如:
@Target({ElementType.METHOD, ElementType.TYPE}),也就是此注解可以在方法和类上面使用

@Inherited:指定被修饰的Annotation将具有继承性
@Documented:指定被修饰的该Annoation可以被javadoc工具提取成文档。

这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。
生命周期长度:RUNTIME > CLASS > SOURCE

你可能感兴趣的:(java,开发语言)