注释
Spring 框架还利用 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 响应中所述。
|