此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cn

Null 安全

尽管 Java 不允许使用其类型系统来表示 null 安全,但 Spring 框架 在包中提供了以下注解,以便您 声明 API 和字段的可为 null 性:org.springframework.langspring-doc.cn

  • @Nullable:Annotation 表示 Specific parameter、return value 或 field 可以是 。nullspring-doc.cn

  • @NonNull:Annotation 表示特定的 parameter、return value 或 field 不能为 (参数、返回值、 和字段 where 和 apply)。null@NonNullApi@NonNullFieldsspring-doc.cn

  • @NonNullApi:包级别的注释 将 Non-Null 声明为参数和返回值的默认语义。spring-doc.cn

  • @NonNullFields:包中的注释 级别,该级别将非 null 声明为字段的默认语义。spring-doc.cn

Spring 框架本身利用了这些 Comments,但它们也可以在任何 基于 Spring 的 Java 项目,用于声明 null 安全的 API 和可选的 null 安全字段。 尚不支持泛型类型参数、vararg 和 array 元素的可为 Null 性声明。 预计在 Spring Framework 版本之间对可为 Null 性声明进行微调, 包括次要的。方法体内部使用的类型的可为 null 性在 的范围。spring-doc.cn

其他常见库(如 Reactor 和 Spring Data)提供了 null 安全的 API,这些 API 使用类似的可为 null 性安排,为 Spring 应用程序开发人员。

使用案例

除了为 Spring 框架 API 可空性提供显式声明外, IDE (比如 IDEA 或 Eclipse) 可以使用这些注解来提供有用的 与 Null 安全相关的警告,以便在运行时避免。NullPointerExceptionspring-doc.cn

它们还用于在 Kotlin 项目中使 Spring API 为空安全,因为 Kotlin 本身就是 支持 NULL 安全。更多详情 在 Kotlin 支持文档中提供。spring-doc.cn

JSR-305 元注释

Spring 注解使用 JSR 305 注解(一种休眠但广泛使用的 JSR)进行元注解。JSR-305 元注解允许工具供应商 一样,以通用方式提供 null 安全支持,而无需 对 Spring 注解的硬编码支持。spring-doc.cn

既没有必要也不建议将 JSR-305 依赖项添加到项目类路径中 利用 Spring 的 null 安全 API。只有使用 其代码库中的 null-safety 注解应使用 Gradle 配置或 Maven 范围添加,以避免编译器警告。com.google.code.findbugs:jsr305:3.0.2compileOnlyprovidedspring-doc.cn