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

Spring中@ConditionalOnBean与@ConfigurationProperties配合不生效问题咨询

Spring中@ConditionalOnBean与@ConfigurationProperties配合不生效问题咨询

各位好,我最近在Spring Boot项目里遇到个配置相关的问题,卡了好一阵,想请大家帮忙看看。

我的需求是:根据一组ConfigurationProperties的存在(实际业务场景里是要根据配置属性里的某个具体值,本来打算用@ConditionalOnExpression或者自定义Condition来实现,但为了简化问题定位,我先用@ConditionalOnBean来复现核心问题),条件化地初始化某个Bean。

首先我先定义了对应的ConfigurationProperties类:

@ConfigurationProperties(prefix = "myprops")
public class MyProps {
    private final List<String> sources;
    
    public MyProps(List<String> sources) {
        this.sources = sources;
        System.out.println("MyProps constructor called with sources: " + sources);
    }

    public List<String> getSources() {
        return sources;
    }
}

然后是我的Spring Boot启动类:

@SpringBootApplication
@EnableConfigurationProperties
@ConfigurationPropertiesScan
public class BeanOrderTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(BeanOrderTestApplication.class, args);
    }

    // 我在某个@Configuration类或者直接在这个启动类里,给目标Bean标注了@ConditionalOnBean(MyProps.class)
    // 比如类似这样的代码:
    // @Bean
    // @ConditionalOnBean(MyProps.class)
    // public MyTargetBean myTargetBean() {
    //     return new MyTargetBean();
    // }
}

但实际运行下来发现,这个@ConditionalOnBean的条件判断完全不生效——不管MyProps这个配置属性Bean有没有被正确加载,目标Bean要么总是被创建,要么总是不创建,完全不符合我的预期。

我猜测会不会是ConfigurationProperties的Bean加载顺序和@ConditionalOnBean的判断时机不匹配?比如@ConditionalOnBean判断的时候,MyProps还没被初始化完成?有没有大佬能帮我分析下问题根源,或者给个解决思路呀?

备注:内容来源于stack exchange,提问作者Ewen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:28:12