如何将@ConfigurationProperties与记录一起使用?
Java 16 引入了Records,这有助于在编写携带不可变数据的类时减少样板代码。当我尝试@ConfigurationProperties如下使用 Record as bean 时,我收到以下错误消息:
@ConfigurationProperties("demo")
public record MyConfigurationProperties(
String myProperty
) {
}
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.example.demo.MyConfigurationProperties required a bean of type 'java.lang.String' that could not be found.
如何使用 Records as @ConfigurationProperties?
回答
回答我自己的问题。
由于缺少无参数构造函数,Spring Boot 无法构造 bean,从而引发上述错误。记录隐式地为每个成员声明了一个带有参数的构造函数。
Spring Boot 允许我们使用@ConstructorBinding注释通过构造函数而不是 setter 方法启用属性绑定(如文档和此问题的答案中所述)。这也适用于记录,所以这有效:
@ConfigurationProperties("demo")
@ConstructorBinding
public record MyConfigurationProperties(
String myProperty
) {
}
- 我收到一个错误,说它是最终的,当我完全使用这种方法时它不应该是最终的。可能是什么问题呢?