註解

Spring 框架也利用 Kotlin null-safety 來判斷 HTTP 參數是否為必要,而無需明確定義 required 屬性。這表示 @RequestParam name: String? 被視為非必要,反之,@RequestParam name: String 則被視為必要。Spring Messaging @Header 註解也支援此功能。

以類似的方式,使用 @Autowired@Bean@Inject 的 Spring bean 注入會使用此資訊來判斷 bean 是否為必要。

例如,@Autowired lateinit var thing: Thing 表示類型為 Thing 的 bean 必須在應用程式 Context 中註冊,而如果此 bean 不存在,@Autowired lateinit var thing: Thing? 則不會引發錯誤。

遵循相同的原則,@Bean fun play(toy: Toy, car: Car?) = Baz(toy, Car) 表示類型為 Toy 的 bean 必須在應用程式 Context 中註冊,而類型為 Car 的 bean 可能存在也可能不存在。相同的行為適用於自動裝配的建構子參數。

如果您在具有屬性或主要建構子參數的類別上使用 bean 驗證,您可能需要使用 註解使用位置目標,例如 @field:NotNull@get:Size(min=5, max=15),如 此 Stack Overflow 回應中所述。