Android 注解的重要元素【Retention】【三】

@Retention
RetentionPolicy.RUNTIME生命周期
: 运行时保留,通过反射访问【反射访问有一定性能开销】

  1. 源代码阶段:

定义带有@Retention(RetentionPolicy.RUNTIME)的注解

在类、方法、字段等元素上使用注解

此时注解仅存在于源代码中

  1. 编译阶段:

javac编译器将注解信息嵌入到.class文件中

注解的类型、属性值等元数据被完整保留

与SOURCE策略不同,不会在此阶段被丢弃

  1. 类加载阶段:

JVM加载.class文件时读取注解信息

注解元数据被加载到方法区(Metaspace

保持注解与被注解元素的关联关系

  1. 运行时阶段:

通过反射API可在运行时访问注解信息

使用getAnnotation()、isAnnotationPresent()等方法

注解信息在应用运行期间始终可用

使用场景:

  1. AOP(面向切面编程):AspectJ等AOP框架需要在运行时读取注解来实现切面逻辑

  2. 测试框架: JUnit等测试框架在运行时读取测试注解来执行测试

  3. 框架配置/依赖注入/权限检查/序列化/反序列化

相关推荐
唐青枫16 小时前
Java JCommander 实战详解:用注解解析命令行参数
java
晴天1616 小时前
Rust 快速入门 (从 JavaScript 开发者视角)-Day09
开发语言·javascript·rust
AFinalStone17 小时前
Android 7系统编译与刷机(三)从编译产物到高通刷机包
android·系统编译
AFinalStone17 小时前
Android 7系统编译与刷机(四)QFIL刷机工具详解
android·系统编译
步行cgn17 小时前
carList.forEach(System.out::println)
java·开发语言·mybatis
进击的程序猿~17 小时前
Go 内存分配与垃圾回收源码深度学习手册
开发语言·后端·golang
plainGeekDev17 小时前
JUnit 4 → JUnit 5 + Kotlin
android·java·kotlin
plainGeekDev17 小时前
Mockito → MockK
android·java·kotlin
geovindu17 小时前
go:Bit Operation Algorithm
开发语言·后端·算法·golang·位运算法
Zane199418 小时前
ThreadLocal 与 BlockingQueue:线程本地变量的内存泄漏原理,以及阻塞队列怎么选?
java·后端