源码注解 /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,框架运行时检测,为空直接抛出异常

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

相关推荐
有脚就行40 分钟前
第24篇-Go-gRPC推理服务-高性能跨语言通信
开发语言·人工智能·后端·golang
码匠许师傅41 分钟前
【C++ 面试真题】聊聊 C++ 的关联容器
开发语言·c++·面试
互联网中的一颗神经元44 分钟前
02. 核心概念与术语表
java·jvm·spring
丰锋ff1 小时前
7.2Qt中Json的操作
开发语言·qt·json
January12071 小时前
Cassandra CQL 基本命令详解
java
我不是疯子是傻子1 小时前
用DeepSeek生成Qt多协议解析器?「正则+状态机+AI分支裁剪」混合调优实战
开发语言·qt
新鲜势力呀1 小时前
深入理解 Elliot CUDA 编程核心:PHP 实现 CUDA 并行计算思想与实践
android·开发语言·php
Escalating_xu1 小时前
【Linux】线程概念与控制:从地址空间、LWP 到 pthread_create、join、detach 与 NPTL
java·linux·redis
Lam Tang1 小时前
APS 系列文章 09
java·代理模式