对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

Null-safety

尽管 Java 无法通过其类型系统表达空值安全性,但 Spring 框架在 org.springframework.lang 包中提供了以下注解,用于声明 API 和字段的可空性:spring-doc.cadn.net.cn

Spring Framework 本身利用了这些注解,但它们也可以用于任何基于 Spring 的 Java 项目中,以声明可空安全的 API 和可选的可空安全字段。 目前尚不支持对泛型类型参数、可变参数(varargs)和数组元素进行可空性声明。 可空性声明可能会在 Spring Framework 的各个版本(包括次要版本)之间进行微调。 方法体内部所使用类型的可空性不属于此功能的范围。spring-doc.cadn.net.cn

其他常用库(例如 Reactor 和 Spring Data)提供了使用类似可空性约定的空安全 API,为 Spring 应用开发者带来一致的整体体验。

用例

除了为 Spring Framework API 的可空性提供显式声明外,这些注解还可被 IDE(例如 IDEA 或 Eclipse)用来提供与空安全相关的有用警告,以避免在运行时出现 NullPointerExceptionspring-doc.cadn.net.cn

它们还用于在 Kotlin 项目中使 Spring API 具备空安全(null-safe)特性,因为 Kotlin 原生支持空安全。更多详细信息请参阅Kotlin 支持文档spring-doc.cadn.net.cn

JSR-305 元注解

Spring 注解使用 JSR 305 注解(一项虽已停滞但广泛使用的 JSR)进行了元注解。JSR-305 元注解使得 IntelliJ IDEA 或 Kotlin 等工具提供商能够以通用的方式提供空安全(null-safety)支持,而无需对 Spring 注解进行硬编码支持。spring-doc.cadn.net.cn

无需也不建议将 JSR-305 依赖项添加到项目 classpath 中以利用 Spring 的空安全(null-safe)API。只有那些在其代码库中使用空安全注解的基于 Spring 的库等项目,才应通过 Gradle 的 com.google.code.findbugs:jsr305:3.0.2 配置或 Maven 的 compileOnly 作用域添加 provided,以避免编译器警告。spring-doc.cadn.net.cn