Spring 团队正式宣布:Spring Boot 4 与整个 Spring 全家桶已全面实现 Null 安全(Null-Safety) ,通过引入 JSpecify 标准注解,让 Java 开发者终于有能力从框架层面杜绝 NullPointerException。
这可能是 Spring 团队自 2014 年发布 Spring Boot 以来,最具影响力的升级之一。
空指针异常(NullPointerException,简称 NPE)曾被称作 “十亿美元的错误”。但在 Spring 团队认为,真正的错误并非 “null” 的存在,而是 Java 语言没有显式表达可空性(nullability) 。
过去,我们通常只能依靠注释、文档,或借助 IDE 来提示某个字段可能为 null。但这些手段都无法在编译期强制检查,NullPointerException 依然可能在运行时出现。
为解决这一长期痛点,Google、JetBrains、Spring 等团队联合推动了 JSpecify 项目[1]:一个用于标准化 Java 可空性表达的注解规范。
它的核心理念是:显式表达每一个可能为空的类型 。 主要注解包括:
•@NullMarked:在包级别启用 Null 安全模式,默认所有类型不可为 null;•@Nullable:显式标记允许为 null;•@NonNull:显式标记禁止为 null。
这些注解不依赖具体框架和工具,可被 IntelliJ IDEA、NullAway、Eclipse 等多种检查器统一识别。
换句话说,JSpecify 让“可空”成为一种语言契约,而不是模糊的约定。
Spring 过去在 org.springframework.lang 包中提供了自己的 @Nullable 与 @NonNull 注解。 如今,这些注解已被正式弃用,统一迁移至 JSpecify 标准注解。
经过数月的改造,Spring 团队宣布以下主要项目已完成 Null-Safe API:
•Spring Boot 4.0 •Spring Framework 7.0 •Spring Data 4.0 •Spring Security 7.0 •Spring Batch 6.0 •Spring Integration 7.0 •Spring Kafka 4.0 •Spring GraphQL 2.0 •Spring Web Services 5.0 •Spring HATEOAS 3.0 •Micrometer 1.16 •Reactor 2025.0
部分组件(如 Spring AI、Spring Session、Spring LDAP)将在未来版本继续完善。
通过这些改造,再结合 Spring Boot 团队提供的 Gradle Nullability 插件,开发者可以在编译阶段彻底消灭 NullPointerException ,实现与语言级 Null 安全机制相当的效果,从而显著降低运行时崩溃的概率。
如果你升级到 Spring Boot 4 并使用 IntelliJ IDEA 2025.3 (预计将在几天后发布),将自动获得对 JSpecify 的完整支持。
同时,Spring Tools 团队也在为 Eclipse 和 VSCode 提供类似的支持配置。
JSpecify 的引入不仅是一次框架层面的改进,更是为 未来 Java 平台原生支持 Null 安全类型 做准备。
当 JDK 正式支持 Null-Restricted 和 Nullable 类型(可能需要数年才能真正落地)时,Spring 已经能做到“无缝对接”。 届时,Null 安全检查将不仅存在于编译期,还能带来运行时性能优化 。
References
[1] JSpecify 项目: https://github.com/jspecify/jspecify
最后欢迎加入苏三的星球,你将获得:智能天气播报AI Agent、SaaS点餐系统(DDD+多租户)、100万QPS短链系统(超过并发)、复杂的商城微服务系统(分布式)、苏三商城系统、苏三AI项目、刷题吧小程序、秒杀系统、码猿简历网站、代码生成工具等10个项目的源代码、开发教程和技术答疑。 系统设计、性能优化、技术选型、底层原理、Spring源码解读、工作经验分享、痛点问题、面试八股文等多个优质专栏。
还有1V1免费修改简历、技术答疑、职业规划、送书活动、技术交流。
扫描下方二维码,可以加入星球:
数量有限,先到先得。 目前星球已经更新了6100+篇优质内容,还在持续爆肝中.....
