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

多个标注@ConditionalOnMissingBean的Bean哪个生效?如何控制优先级?

@ConditionalOnMissingBean 多Bean生效规则与优先级控制

最终生效的Bean判定规则

@ConditionalOnMissingBean 的核心逻辑是:只有当前Spring容器中不存在匹配的Bean时,才会注册被该注解标注的Bean。多个同匹配规则的该注解Bean最终谁生效,完全由Spring的Bean加载顺序决定:先被加载的Bean会成功注册到容器中,后加载的Bean检测到容器中已经存在匹配的Bean,就会直接跳过注册,不会生效。

控制加载优先级的常用方式

  • 调整配置类加载顺序
    普通配置类可以加@Order注解,Spring Boot自动配置类可以加@AutoConfigureOrder注解指定加载优先级,注解值越小优先级越高,优先级更高的配置类内部的Bean会先被加载。
  • 精准指定匹配规则
    默认@ConditionalOnMissingBean按Bean类型匹配,你可以通过name属性指定要匹配的Bean名称,仅当容器中不存在该名称的Bean时才注册当前Bean,避免同类型不同业务Bean的干扰,示例用法:
    @ConditionalOnMissingBean(name = "customUserService")
    @Bean
    public UserService userService() {
        return new DefaultUserService();
    }
    
  • 用@DependsOn强制依赖顺序
    可以给Bean加@DependsOn("beanName")注解,强制当前Bean在指定的Bean加载完成之后再加载,间接调整注册顺序。
  • 调整Bean覆盖配置
    Spring Boot默认允许同名Bean覆盖,你可以通过配置spring.main.allow-bean-definition-overriding=false关闭该规则,避免后加载的Bean意外覆盖先加载的同名称Bean,也方便排查加载顺序异常问题。
  • 配合@Primary调整注入优先级
    如果出现同类型多个Bean都被注册的场景,标注了@Primary的Bean会被作为自动注入的首选,这个属于注入阶段的优先级,和注册阶段的@ConditionalOnMissingBean配合可以实现更灵活的Bean选择逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:45:03