You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@ConfigurationProperties重复前缀问题:多Bean共享同配置如何实现?

解决@ConfigurationProperties重复前缀报错的方案

由于Spring不允许多个@ConfigurationProperties使用相同前缀,直接给两个Bean方法标注相同前缀会触发冲突。结合Base类无法修改的限制,提供以下两种可行方案:

方案一:通过中间配置类共享属性

创建单独的配置类绑定test前缀的属性,再在两个Bean的创建方法中注入该配置类,为Base实例的key赋值:

// 绑定test前缀的配置类
@ConfigurationProperties(prefix = "test")
class TestProperties {
    var key: String? = null
}

// 启用配置属性绑定(若未全局开启)
@Configuration
@EnableConfigurationProperties(TestProperties::class)
class BeanConfig {

    @Bean
    fun getA(testProperties: TestProperties): Base {
        return object : Base() {
            override var key: String = testProperties.key!!
            override fun execute() {
                // do something
            }
        }
    }

    @Bean
    fun getB(testProperties: TestProperties): Base {
        return object : Base() {
            override var key: String = testProperties.key!!
            override fun execute() {
                // do something else
            }
        }
    }
}

该方案适合配置项较多的场景,便于统一管理配置属性,避免重复编写注入逻辑。

方案二:使用@Value直接注入属性

直接在Bean创建方法的参数中通过@Value注入配置值,再赋值给Base实例的key:

@Configuration
class BeanConfig {

    @Bean
    fun getA(@Value("\${test.key}") key: String): Base {
        return object : Base() {
            override var key: String = key
            override fun execute() {
                // do something
            }
        }
    }

    @Bean
    fun getB(@Value("\${test.key}") key: String): Base {
        return object : Base() {
            override var key: String = key
            override fun execute() {
                // do something else
            }
        }
    }
}

该方案更简洁,适合配置项较少的场景,无需额外创建配置类。

注意事项

  • 确保配置文件properties.yml中的test.key存在有效值,可根据业务需求替换方案一中的!!为空安全处理逻辑,避免空指针异常。
  • 两种方案均无需修改依赖库中的Base类,仅需调整Bean的创建逻辑。

内容的提问来源于stack exchange,提问作者user3908406

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:56:05