註解
Spring Framework 還利用 Kotlin 的空安全 特性,無需顯式定義 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 校驗,您可能需要使用 註解的 use-site targets,例如 @field:NotNull 或 @get:Size(min=5, max=15) ,如 這篇 Stack Overflow 回答 所述。 |