注解的生命周期有三种,注解驻留在源文件阶段,字节码文件阶段和内存字节码阶段。
(1)注解被保留到源文件阶段
当javac把.java源文件编译成.class时,就将相应的注解去掉。这种注解的生命周期就维持到源文件阶段。
(2)注解被保留到字节码文件阶段
在JVM通过ClassLoader向内存中加载字节码文件时候,JVM会去掉相应的注解。这种注解的生命周期就维持到字节码文件阶段。
注意:生命周期到源文件阶段和字节码文件阶段的注解,由于JVM执行内存中的字节码时候,相应的注解已经被Javac或者JVM去除,所以无法使用反射来访问相应的注解。
(3)注解被保留到内存中的字节码阶段
JVM运行内存的字节码时候,仍然可能会保留并且执行的某些注解。这种注解的生命周期就维持到内存字节码阶段。
注意:这个阶段,程序可以通过反射访问生命周期到内存字节码阶段的注解。
三个阶段简单表示为:java源文件-->class文件-->内存中的字节码