Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级

发布于:2025-06-07 ⋅ 阅读:(18) ⋅ 点赞:(0)

大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!

在 Broadcom 发布 Spring Boot 3.5 的同时,Spring 团队也正积极筹备将于 2025 年 11 月发布的 Spring Framework 7.0 与 Spring Boot 4.0。除了框架版本的跃迁,社区也关注 Spring 在新特性、兼容性与支持策略等方面的动态,特别是在 Java AOT 缓存集成、JSpecify 空指针安全注解体系、以及支持周期策略更新方面。

InfoQ 近期采访了 Spring Framework 核心提交者 Sébastien Deleuze 和 Spring 开源研发总监 Michael Minella,就这几个焦点话题进行了深入探讨。


应对容器化启动延迟:Spring 如何与 AOT 缓存集成?

在 Project Leyden 的推动下,Java 社区正在积极推进 AOT(Ahead-of-Time)优化以加快启动速度。对于将 Spring Boot 应用打包成容器镜像的开发者来说,集成 AOT 缓存将成为提升冷启动性能的关键手段。

Sébastien 表示,Spring Boot 已提供 extract 命令用于解压可执行 JAR 文件,并可与 CDS(Class Data Sharing)或 AOT 缓存结合使用。详见官方文档:Spring Boot Packaging - Efficient Images

此外,Java 25 将引入 JEP 515(方法级 AOT 预热)与 JEP 草案(AOT 编译),结合真实工作负载训练,将 AOT 缓存下沉到平台层而非容器镜像内,Spring AOT 也正与 Tanzu Platform 和 Tanzu Spring 深度整合,实现平台级 AOT 优化。

对于直接在镜像中包含缓存的情况,Buildpacks 工具链可自动执行训练步骤,并将生成的缓存文件随镜像一同发布。与 OpenJDK 的 CRaC 项目不同,CDS 与 AOT 缓存不会转储 JVM 内存状态,因此不存在秘钥或敏感数据泄露风险。建议将 AOT 缓存置于顶层镜像层中,最大化缓存复用效益。


空指针风险治理:JSpecify 是 Java 的未来吗?

空指针异常始终是 Java 的痛点。虽然 JEP 8303099(Null-Restricted and Nullable Types)仍在草案阶段,但由 Google、Spring、JetBrains 等共同推动的 JSpecify 项目,已成为 Java 静态分析中空值语义的事实标准。

Spring 从 Spring Boot 4.0 开始,将在所有项目中逐步引入 JSpecify 注解体系。但开发者如何判断三方库是否支持 JSpecify 呢?

Sébastien 表示,目前尚无统一的 JSpecify 支持库列表,但 Google、Gradle、GraphQL 等已有落地实践。Spring 团队计划将这个建议反馈至 JSpecify 工作组。

开发者应注意以下三点:

  1. 三类空值语义

    • @Nullable:明确允许为 null
    • @NonNull:明确禁止为 null
    • 默认(Unspecified):未标注,需谨慎处理
  2. 逐步引入机制
    可在包级别使用 @NullMarked 设定默认非 null,局部使用 @Nullable 标注例外,支持渐进式迁移。

  3. JDK 兼容性
    当前 JDK 的大多数 API 尚未标注空值语义,但 JSpecify 正努力推进标准库的标注覆盖。


Spring 支持策略更新:更长生命周期、更一致规则

Spring Boot 3.5 是 Spring Boot 3.x 系列的最后一个次版本(minor release),同时也将成为新的 LTS(长期支持)版本。相比 Spring Boot 2.7 的 18 个月开源支持 + 4.5 年企业支持,3.5 的支持策略出现了一些调整:

  • 开源支持(OSS)缩短为 13 个月
  • 企业支持期限延长,总支持周期超过 7 年

Michael Minella 表示,过去 Spring 的各个项目支持周期不统一,给用户带来理解成本。因此,团队在 2025 年 2 月对支持政策进行了重大调整:

  1. 全栈对齐
    所有 Spring 项目与其对应的 Spring Boot 版本保持一致的支持周期。今后用户只需关注 Spring Boot 的发布时间,即可推算其他项目的支持节奏。

  2. 统一 LTS 策略
    每个主版本(major)的最后一个次版本(如 3.5)将获得总计 7 年以上的支持:13 个月开源 + 12 个月常规企业支持 + 5 年 LTS 企业支持。

此外,所有支持结束时间将统一为每年 6 月 30 日或 12 月 31 日,进一步降低用户理解难度。Spring 官网也在逐步更新以反映这一策略。


总结

Spring 团队正在全方位推动框架现代化与平台兼容性提升:

  • 借助 AOT 缓存与 Project Leyden 接轨,助力 Spring 应用迈入“亚秒级启动”时代;
  • 推广 JSpecify,构建更健壮、类型安全的 Java 空值体系;
  • 更新支持策略,简化升级路径,延长版本生命周期,回馈企业级用户信任。

在迈向 Spring Framework 7.0 与 Boot 4.0 的关键阶段,Spring 团队正以更开放、标准化的姿态迎接未来挑战。

转自:https://mp.weixin.qq.com/s/vQkL1bULGf6fduJ1g4cLsA


网站公告

今日签到

点亮在社区的每一天
去签到