注解@Retention的作用

简介: 注解@Retention的作用

注解@Retention可以用来修饰注解,是注解的注解,称为元注解。

Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,

这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE

按生命周期来划分可分为3类:

1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;

2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;

3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

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

那怎么来选择合适的注解生命周期呢?

首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。

一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解

如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;

如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。


注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法的名字出错时,编译器就会报错

注解@Deprecated,用来表示某个类或属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated修饰

注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候


相关文章
|
Java 微服务 Spring
@EnableDiscoveryClient注解的作用
@EnableDiscoveryClient注解的作用 @EnableDiscoveryClient 及@EnableEurekaClient 类似,都是将一个微服务注册到Eureka Server(或其他 服务发现组件,例如Zookeeper、Consul等)
|
7月前
|
设计模式 Java 测试技术
【注解使用】使用@Autowired注解警告Field injection is not recommended
【注解使用】使用@Autowired注解警告Field injection is not recommended
42 0
|
10月前
|
Java
java注解(作用于注解)
java注解(作用于注解)
84 0
|
10月前
|
XML Java 编译器
【学习总结】注解和元注解
【学习总结】注解和元注解
【学习总结】注解和元注解
|
10月前
|
Java
Java注解--元注解
元注解的个人总结
Zp
@PostConstruct注解作用
@PostConstruct注解作用
Zp
118 0
Zp
|
XML Java 数据格式
@Component注解的作用
@Component注解的作用
Zp
227 0
@Component注解的作用
|
Java 数据库连接
Hibernate各个注解含义和使用讲解
Hibernate各个注解含义和使用讲解
104 0
Hibernate各个注解含义和使用讲解
|
Dubbo Java 编译器
一文搞定java元注解:Target、Retention、Documented、Inherited、Repeatable(JDK1.8新增)
一文搞定java元注解:Target、Retention、Documented、Inherited、Repeatable(JDK1.8新增)
274 0
一文搞定java元注解:Target、Retention、Documented、Inherited、Repeatable(JDK1.8新增)