做项目时需要自定义注解,用到了@Target和@Retention这两个注解,查阅资料记录一下里面的参数和注解的用法。
如下代码所示,这是一个自定义注解,用来记录访客访问日志
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface VisitLogger {
}
注解@Target和@Retention可以用来修饰注解,是注解的注解,称为元注解
@Target
说明了自定义注解的作用目标,即自定义注解可以用在什么地方
取值(ElementType) 有:
@Target(ElementType.TYPE) //接口、类、枚举
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
@Retention
用来表示注解的生命周期,生命周期的长短取决于@Retention的属性RetentionPolicy指定的值
RetentionPolicy.SOURCE : 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
RetentionPolicy.CLASS : 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
RetentionPolicy.RUNTIME : 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
范围大小:
SOURCE < CLASS < RUNTIME
本文介绍了在Java中如何使用@Target和@Retention来定义和控制自定义注解的使用范围及生命周期。@Target用于指定注解可以应用的程序元素,如方法、字段等。@Retention则决定了注解的生存周期,可以选择在源码、类文件或运行时保留。以一个记录访客访问日志的自定义注解为例,详细阐述了这两个元注解的参数和用法。
687

被折叠的 条评论
为什么被折叠?



