|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
注解
Spring 框架还利用了 Kotlin 的空安全(null-safety)特性,
无需显式定义 required 属性即可判断 HTTP 参数是否为必需。
这意味着 @RequestParam name: String? 被视为非必需参数,
而 @RequestParam name: String 则被视为必需参数。
此特性在 Spring Messaging 的 @Header 注解中也同样受支持。
类似地,Spring 使用 @Autowired、@Bean 或 @Inject 进行 Bean 注入时,会利用此信息来判断某个 Bean 是否为必需。
例如,@Autowired lateinit var thing: Thing 表示必须在应用上下文中注册一个类型为 Thing 的 bean,而 @Autowired lateinit var thing: Thing? 在该 bean 不存在时不会抛出错误。
遵循相同的原则,@Bean fun play(toy: Toy, car: Car?) = Baz(toy, Car) 表示
必须在应用上下文中注册一个类型为 Toy 的 Bean,而类型为 Car 的 Bean 可以存在,也可以不存在。同样的行为也适用于自动装配的构造函数参数。
如果你在具有属性或主构造函数参数的类上使用 Bean Validation,可能需要使用注解的使用位置目标(annotation use-site targets),例如 @field:NotNull 或 @get:Size(min=5, max=15),如此 Stack Overflow 回答中所述。 |