用途:在 Spring Boot 3 / Spring Framework 6 代码中标注可空性、集成 Kotlin,或在不预设 Spring 版本迁移语义的前提下加入静态可空性检查。
主要能力:采用项目已支持的可空性模型。Spring Framework 6 常用 org.springframework.lang.Nullable、@NonNull 以及包级 @NonNullApi;JSpecify 可以有意识地引入,但不要在 Boot 3 模块中假定 Framework 7 的迁移语义。
使用方式:用 @Nullable 标注真正可为空的结果与参数;保持仓库返回类型显式;在边界处校验外部输入;Java 与 Kotlin 混用时,让 Kotlin 编译器设置与注解保持一致。若项目独立统一采用 JSpecify,则在模块边界一致应用,并记录所选检查器。包级注解示例: @NonNullApi package com.example.orders;
import org.springframework.lang.NonNullApi;
限制与注意事项:不要假定 Framework 7 的 JSpecify 默认值,Boot 3 项目通常使用 Spring 旧版注解;使用 @NonNullApi 时必须导入包注解,包元数据需能编译并纳入版本控制;不要给每个值都标 @NonNull,应建立包默认值、只标注可空例外;注解不是运行时校验,输入校验应使用 Bean Validation 或显式检查;修改仓库可空契约时要同步更新调用方,保留 Optional、可空与空集合语义;不要在没有迁移计划的情况下混用 JSpecify 与 Spring 注解,应在模块边界选定一种策略。官方文档与更多细节暂未提供。