跳到主要内容

注释

ChatGPT-4o 中英对照 Annotations

Spring Framework 还利用了 Kotlin 的空安全性 来判断一个 HTTP 参数是否是必需的,而无需显式定义 required 属性。这意味着 @RequestParam name: String? 被视为非必需的,反之,@RequestParam name: String 被视为必需的。这个特性在 Spring Messaging 的 @Header 注解中也得到了支持。

类似地,使用 @Autowired@Bean@Inject 进行 Spring 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 验证,你可能需要使用注解使用位置目标,例如 @field:NotNull@get:Size(min=5, max=15),正如这个 Stack Overflow 回答中所描述的。