当前位置: 首页 > news >正文

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

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

在 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

http://www.lqws.cn/news/187399.html

相关文章:

  • ADI的BF609双核DSP怎么做开发,我来说一说(五)LAN口测试
  • 汽车免拆诊断案例 | 2010款捷豹XFL车制动警告灯、DSC警告灯异常点亮
  • LINUX 66 FTP 2 ;FTP被动模式;FTP客户服务系统
  • [蓝桥杯]搭积木
  • 【Zephyr 系列 11】使用 NVS 实现 BLE 参数持久化:掉电不丢配置,开机自动加载
  • [c#]判定当前软件是否用管理员权限打开
  • libGL error
  • CVPR 2025 | 港中文 MMLab 提出文生图模型 T2I-R1,文生图进入R1时刻!
  • [论文阅读] 人工智能 | 大语言模型计划生成的新范式:基于过程挖掘的技能学习
  • 【Bluedroid】蓝牙启动之 SMP_Init 源码解析
  • 外卖大战背后的创始人IP智慧:差异化、护城河与心智占领
  • MySQL基础(三)DQL(Data Query Language,数据查询语言)
  • 如何使用k8s安装redis呢
  • 深入理解 Python `asyncio` 的子进程协议(Subprocess Protocol)
  • C++算法-动态规划2
  • 数据库优化秘籍:解锁性能提升的 “潘多拉魔盒”
  • OpenLayers 分屏对比(地图联动)
  • 记录一个用了很久的git提交到github和gitee比较方便的方法
  • JDK8之后的新特性
  • React源码阅读-fiber核心构建原理
  • 【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
  • QPair 类说明
  • 水库大坝安全监测系统是什么?需要用到哪些设备?
  • 1.3 古典概型和几何概型
  • 2025.6.5学习日记 Nginx主目录文件 .conf介绍、热部署 定时日志切割
  • 实战设计模式之模板方法模式
  • Go 中的 Map 与字符处理指南
  • 如何使用Webhook触发器,在 ONLYOFFICE 协作空间构建智能工作流
  • C++中的概念(Concepts)
  • 自然语言处理的发展