当前位置: 代码网 > it编程>编程语言>Java > Spring @ConditionalOnMissingBean 注解的主要作用解析

Spring @ConditionalOnMissingBean 注解的主要作用解析

2026年01月25日 Java 我要评论
@conditionalonmissingbean 是 spring boot 自动配置中一个非常常用的条件化注解,它的核心作用是:只有当指定的 bean 在 spring 容器中不存在时,才创建被标

@conditionalonmissingbean 是 spring boot 自动配置中一个非常常用的条件化注解,它的核心作用是:只有当指定的 bean 在 spring 容器中不存在时,才创建被标注的 bean 或配置类。

主要作用

1.提供默认配置

spring boot 的自动配置大量使用该注解,为常见组件提供默认实现。

@configuration
public class myautoconfiguration {
    @bean
    @conditionalonmissingbean  // 只有在用户没有定义自己的 datasource 时,才创建这个默认的
    public datasource datasource() {
        return new hikaridatasource();
    }
}

2.允许用户自定义 bean 覆盖默认配置

用户可以定义自己的 bean 来覆盖 spring boot 的默认实现。

@configuration
public class mycustomconfig {
    @bean
    public datasource datasource() {
        // 用户自定义的 datasource
        return new mycustomdatasource();
        // 由于这个 bean 存在,上面的自动配置的 datasource 就不会被创建
    }
}

常见用法

1.指定 bean 类型

@bean
@conditionalonmissingbean
public myservice myservice() {
    return new defaultmyservice();
}

2.指定具体的 bean 名称

@bean
@conditionalonmissingbean(name = "custombean")
public myservice myservice() {
    return new defaultmyservice();
}

3.指定多个 bean 类型

@bean
@conditionalonmissingbean({datasource.class, xadatasource.class})
public datasource datasource() {
    return new embeddeddatasource();
}

实际应用场景

场景1:数据库配置

@configuration
@conditionalonclass(datasource.class)
public class datasourceautoconfiguration {
    @bean
    @conditionalonmissingbean
    @conditionalonproperty(prefix = "spring.datasource", name = "type")
    public datasource datasource(datasourceproperties properties) {
        // 创建默认数据源
    }
}

场景2:缓存配置

@configuration
@conditionalonclass(cachemanager.class)
public class cacheautoconfiguration {
    @bean
    @conditionalonmissingbean
    public cachemanager cachemanager() {
        // 提供默认的缓存管理器
    }
}

与其他条件注解配合使用

@configuration
@conditionalonclass(myservice.class)  // 类路径存在时才生效
@conditionalonproperty(prefix = "app", name = "enabled", havingvalue = "true")  // 属性条件
public class myautoconfiguration {
    @bean
    @conditionalonmissingbean  // 用户没有自定义时才生效
    public myservice myservice() {
        return new defaultmyservice();
    }
}

注意事项

  1. 加载顺序问题:bean 的创建顺序会影响 @conditionalonmissingbean 的判断结果
  2. 多个配置类:如果有多个配置类都定义了相同的 bean,spring 需要确定哪个配置类先加载
  3. 配合 @primary 使用:当有多个同类型 bean 时,可以指定哪个是主要的
@bean
@conditionalonmissingbean
@primary  // 当有多个 datasource 时,这个作为主要的
public datasource primarydatasource() {
    return new primarydatasource();
}

总结

@conditionalonmissingbean 是 spring boot “约定优于配置” 理念的重要实现:

  • ✅ 提供开箱即用的默认配置
  • ✅ 允许用户轻松自定义和覆盖
  • ✅ 避免 bean 定义的冲突
  • ✅ 是 spring boot 自动配置灵活性的关键

这种机制使得 spring boot 既能提供强大的默认配置,又保持了高度的可定制性。

到此这篇关于spring @conditionalonmissingbean 注解是做什么的的文章就介绍到这了,更多相关spring @conditionalonmissingbean 注解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com