RetentionPolicy做为一个enum类, 有三个值。
- RetentionPolicy.SOURCE: 其生命周期只存在于source code这个阶段, 在compile的时候, 这类annotation会被JVM所丢弃。当编译完成后, 这类annotation是没有用处的。如:
@Override
,@SuppressWarnings
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }
- RetentionPolicy.CLASS: RetentionPolicy默认为 CLASS, 当class被加载时, 此类annotation被丢弃。(感觉很少有使用CLASS的情况)
- RetentionPolicy.RUNTIME: 存在于整个JVM运行环境中。 如:@Deprecated
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}) public @interface Deprecated { }
Code Example:
importjava.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * */ public class RetentionPolicyDemo { @Retention(RetentionPolicy.SOURCE) @interface RetentionSource {} @Retention(RetentionPolicy.CLASS) @interface RetentionClass {} @Retention(RetentionPolicy.RUNTIME) @interface RetentionRuntime {} public static void main(String[] args) { @RetentionSource class B {} System.out.println(B.class.getAnnotations().length ); // Result: 0 @RetentionClass class C {} System.out.println(C.class.getAnnotations().length ); // Result: 0 @RetentionRuntime class D {} System.out.println(D.class.getAnnotations().length ); // Result: 1 } }
只有RetentionPolicy.RUNTIME 返回大于0的length.
字节码demo:
@Retention(RetentionPolicy.CLASS) @Target(ElementType.TYPE) public @interface Anno { }
@Anno public class AnnoTest { @Deprecated public void test() { } }
Constant pool:
#1 = Methodref #3.#19 // java/lang/Object."<init>":()V
#2 = Class #20 // com/my/java/lang/annotation/retentio
#3 = Class #21 // java/lang/Object
#4 = Utf8 <init>
#5 = Utf8 ()V
#6 = Utf8 Code
#7 = Utf8 LineNumberTable
#8 = Utf8 LocalVariableTable
#9 = Utf8 this
#10 = Utf8 Lcom/my/java/lang/annotation/retentionPolicy/AnnoTest;
#11 = Utf8 test
#12 = Utf8 Deprecated
#13 = Utf8 RuntimeVisibleAnnotations
#14 = Utf8 Ljava/lang/Deprecated;
#15 = Utf8 SourceFile
#16 = Utf8 AnnoTest.java
#17 = Utf8 RuntimeInvisibleAnnotations
#18 = Utf8 Lcom/my/java/lang/annotation/retentionPolicy/Anno;
#19 = NameAndType #4:#5 // "<init>":()V
#20 = Utf8 com/my/java/lang/annotation/retentionPolicy/AnnoTest
从红色字体中可以看出RetentionPolicy.RUNTIME为RuntimeVisibleAnnotations。
RetentionPolicy.CLASS为RuntimeInvisibleAnnotations
相关推荐
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...
@androidx.annotation.NonNull 缺失的兼容、androidx.annotation兼容包
javax.annotation-3.0.jar javax.annotation-3.0.jar javax.annotation-3.0.jar
赠送jar包:geronimo-annotation_1.0_spec-1.1.1.jar; 赠送原API文档:geronimo-annotation_1.0_spec-1.1.1-javadoc.jar; 赠送源代码:geronimo-annotation_1.0_spec-1.1.1-sources.jar; 赠送Maven依赖信息文件:...
Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、...
Spring Annotation
这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...
JDK9及以上版本没有javax.annotation-api-***.jar包 ,无法使用注解:@Resource JDK新特性,高版本JDK没有自带的javax(java扩展包)了。或者是使用的JDK不完整。 下载javax.annotation.jar包,导入到lib文件夹下,...
androidx-annotation-1.0.0.jar
Java Annotation详解 Java Annotation详解 Java Annotation详解
Annotation权威资料 Annotation权威资料 Annotation权威资料 Annotation权威资料 Annotation权威资料 Annotation权威资料Annotation权威资料
hibernate annotation hibernate3
hibernate annotation中文文档
Annotation核心技术Annotation核心技术Annotation核心技术Annotation核心技术Annotation核心技术Annotation核心技术
Java 5 annotation 学习笔记Java 5 annotation 学习笔记Java 5 annotation 学习笔记
hibernate 注解 annotation 教程
赠送jar包:mybatis-plus-annotation-3.2.0.jar; 赠送原API文档:mybatis-plus-annotation-3.2.0-javadoc.jar; 赠送源代码:mybatis-plus-annotation-3.2.0-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-...