|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
零安全
虽然 Java 不允许你用类型系统表达空安全,但 Spring 框架
提供了以下注释org.springframework.lang包裹让你
声明API和字段的可空性:
-
@Nullable: 注释以表示 具体参数、返回值或字段可以是零. -
@NonNull:注释以表示特定的 参数、返回值或字段不能为零(参数、返回值不需, 以及域@NonNullApi和@NonNullFields分别应用。 -
@NonNullApi: 包级注释 该系统将参数和返回值的默认语义声明为非空。 -
@NonNullFields: 包注释 该级别将字段的默认语义称为非空。
Spring Framework 本身利用这些注释,但它们也可以用于任何 基于Spring的Java项目,用于声明空安全API,并可选地声明空安全字段。 通用类型参数、varargs 和数组元素的可空性声明尚未被支持。 Nullability声明预计将在Spring Framework版本之间进行微调, 包括一些小问题。方法体内使用的类型可空性在 本功能范围。
| 其他常见库如 Reactor 和 Spring Data 提供空安全 API,满足条件 使用类似的空可性安排,提供一致的整体体验 Spring 应用开发者。 |
使用场景
除了为 Spring Framework API 的可空性提供显式声明外,
这些注释可以被IDE(如IDEA或Eclipse)用来提供有用的信息
关于零安全(null-safety)的警告,以防避免NullPointerException在运行时。
它们也被用来使 Kotlin 项目中的 Spring API 实现空安全,因为 Kotlin 本身就是原生的 支持零安全。更多细节 可在Kotlin支持文档中找到。
JSR-305元注释
春季注释采用 JSR 305 注释进行元注释(这是一种休眠但广泛使用的 JSR)。JSR-305 元注释让工具厂商得以实现 像 IDEA 或 Kotlin 以通用方式提供零安全支持,无需 支持Spring注释的硬代码。
既不必要也不推荐在 的项目类路径中添加 JSR-305 依赖
利用 Spring 的空安全 API。只有像基于 Spring 的库这样的项目,使用
代码库中的空安全注释应会添加com.google.code.findbugs:jsr305:3.0.2跟仅编译Gradle 配置或 Maven提供以避免编译器警告的范围。