源码注解 /class 注解 / 运行时注解三者生命周期

Java 注解生命周期简图

三类保留策略:SOURCE / CLASS / RUNTIME

分层对照表

保留策略 RetentionPolicy 代表注解 IDE 能读到 class 里存在 运行时反射可读
SOURCE 源码级 @Nullable(Spring)、//注释 ✅ 可以 ❌ 编译后删除 ❌ 不能
CLASS 字节码级 部分 Lombok 内部注解 ✅ 可以 ✅ 存在 ❌ 默认丢弃
RUNTIME 运行时级 @Autowired、@RequestMapping ✅ 可以 ✅ 存在 ✅ 反射拿到

关键结论提炼

  • org.springframework.lang.@Nullable 只活在 .java 源码 ,编译一出直接消失; 只有 IDEA、Sonar 这类静态工具看得见,Spring 运行时完全看不到。

  • @Autowired 这种运行时注解 一路保存到程序运行,Spring 依靠反射解析注解实现依赖注入。

容易混淆两组注解区分

  • org.springframework.lang.NonNull 👉 SOURCE、仅静态提示,不会运行校验
  • jakarta.validation.NotNull(参数校验) 👉 RUNTIME,框架运行时检测,为空直接抛出异常

一个是给开发看的 "约定提醒",一个是线上生效的 "强制校验"。

相关推荐
秋饼32 分钟前
GPT-Live 全双工语音 API Java 服务端落地实战:事件协议、会话恢复与生产踩坑
java·ai·技术分享·后端开发
SL_staff33 分钟前
为什么企业级自动化不能只靠AI编排?——逻辑引擎在确定性业务场景中的不可替代性
java·开源·产品
路溪非溪1 小时前
python标准库使用总结
开发语言·python
Pniubi2 小时前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql
SomeOtherTime3 小时前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
松仔log3 小时前
Kotlin中级——callbackFlow
java·前端·kotlin
zh_xuan3 小时前
kotlin常见面试题
开发语言·kotlin·面试题
知守观3 小时前
同一个团队两套分包:DDD 四层落地后,domain 层最大的类还是 5885 行
java·后端·领域驱动设计
文丑颜不良啊4 小时前
LeetCode2541~2560题目解析
java·leetcode
瑞雪兆丰年兮4 小时前
JavaWeb-day11-SpringBootWeb案例(文件上传)
java·运维·服务器·javaweb·oss