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

注解

Spring 框架还利用了 Kotlin 的空安全(null-safety)特性, 无需显式定义 required 属性即可判断 HTTP 参数是否为必需。 这意味着 @RequestParam name: String? 被视为非必需参数, 而 @RequestParam name: String 则被视为必需参数。 此特性在 Spring Messaging 的 @Header 注解中也同样受支持。spring-doc.cadn.net.cn

类似地,Spring 使用 @Autowired@Bean@Inject 进行 Bean 注入时,会利用此信息来判断某个 Bean 是否为必需。spring-doc.cadn.net.cn

例如,@Autowired lateinit var thing: Thing 表示必须在应用上下文中注册一个类型为 Thing 的 bean,而 @Autowired lateinit var thing: Thing? 在该 bean 不存在时不会抛出错误。spring-doc.cadn.net.cn

遵循相同的原则,@Bean fun play(toy: Toy, car: Car?) = Baz(toy, Car) 表示 必须在应用上下文中注册一个类型为 Toy 的 Bean,而类型为 Car 的 Bean 可以存在,也可以不存在。同样的行为也适用于自动装配的构造函数参数。spring-doc.cadn.net.cn

如果你在具有属性或主构造函数参数的类上使用 Bean Validation,可能需要使用注解的使用位置目标(annotation use-site targets),例如 @field:NotNull@get:Size(min=5, max=15),如此 Stack Overflow 回答中所述。