Spring Boot 2.5.4版本@ConstructorBinding注解不生效问题求解
问题原因
- 报错的核心是注解使用冲突:你在需要
@ConstructorBinding构造绑定的配置属性类上额外添加了@Configuration注解。@Configuration会将类标记为普通Spring配置类,Spring会按照常规Bean的实例化逻辑处理,尝试从容器中查找构造函数所需的String类型Bean完成注入,你的容器中没有对应类型的Bean,就抛出了该报错。@ConstructorBinding的生效依赖Spring Boot的配置属性绑定逻辑,添加@Configuration后,普通Bean实例化逻辑优先级更高,覆盖了配置属性绑定的逻辑,导致构造绑定失效。
解决方案
两种修改方式任选其一即可:
方式一:移除@Configuration注解(推荐,适配不可变配置类场景)
你主启动类已经添加了@ConfigurationPropertiesScan,会自动扫描所有带@ConfigurationProperties的类,结合@ConstructorBinding完成不可变类的配置属性绑定,不需要额外加@Configuration。修改后的Config类代码如下:
@ConfigurationProperties("test") public class Config { public final String foo; @ConstructorBinding public Config(String foo) { this.foo = foo; } }
方式二:保留@Configuration的同时主动注册配置类
如果业务需要必须保留@Configuration注解,可以在主启动类添加@EnableConfigurationProperties指定需要绑定的配置类,主动触发配置绑定逻辑,优先级高于普通Bean实例化:
@SpringBootApplication @EnableConfigurationProperties(Config.class) public class Application implements CommandLineRunner { // 原有代码无需修改 }
内容的提问来源于stack exchange,提问作者OhleC
相关产品推荐
相关产品推荐

