最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2026年01月24日 09:19:00   作者:牧小七  
@ConditionalOnMissingBean是Spring Boot中用于條件化配置的注解,確保只有在指定Bean不存在時(shí)才創(chuàng)建,它在自動(dòng)配置中廣泛應(yīng)用,提供默認(rèn)配置并允許用戶自定義Bean,本文給大家介紹Spring @ConditionalOnMissingBean注解的作用,感興趣的朋友一起看看吧

@ConditionalOnMissingBean 是 Spring Boot 自動(dòng)配置中一個(gè)非常常用的條件化注解,它的核心作用是:只有當(dāng)指定的 Bean 在 Spring 容器中不存在時(shí),才創(chuàng)建被標(biāo)注的 Bean 或配置類。

主要作用

1.提供默認(rèn)配置

Spring Boot 的自動(dòng)配置大量使用該注解,為常見組件提供默認(rèn)實(shí)現(xiàn)。

@Configuration
public class MyAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean  // 只有在用戶沒有定義自己的 DataSource 時(shí),才創(chuàng)建這個(gè)默認(rèn)的
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}

2.允許用戶自定義 Bean 覆蓋默認(rèn)配置

用戶可以定義自己的 Bean 來覆蓋 Spring Boot 的默認(rèn)實(shí)現(xiàn)。

@Configuration
public class MyCustomConfig {
    @Bean
    public DataSource dataSource() {
        // 用戶自定義的 DataSource
        return new MyCustomDataSource();
        // 由于這個(gè) Bean 存在,上面的自動(dòng)配置的 DataSource 就不會(huì)被創(chuàng)建
    }
}

常見用法

1.指定 Bean 類型

@Bean
@ConditionalOnMissingBean
public MyService myService() {
    return new DefaultMyService();
}

2.指定具體的 Bean 名稱

@Bean
@ConditionalOnMissingBean(name = "customBean")
public MyService myService() {
    return new DefaultMyService();
}

3.指定多個(gè) Bean 類型

@Bean
@ConditionalOnMissingBean({DataSource.class, XADataSource.class})
public DataSource dataSource() {
    return new EmbeddedDataSource();
}

實(shí)際應(yīng)用場(chǎng)景

場(chǎng)景1:數(shù)據(jù)庫配置

@Configuration
@ConditionalOnClass(DataSource.class)
public class DataSourceAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = "spring.datasource", name = "type")
    public DataSource dataSource(DataSourceProperties properties) {
        // 創(chuàng)建默認(rèn)數(shù)據(jù)源
    }
}

場(chǎng)景2:緩存配置

@Configuration
@ConditionalOnClass(CacheManager.class)
public class CacheAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public CacheManager cacheManager() {
        // 提供默認(rèn)的緩存管理器
    }
}

與其他條件注解配合使用

@Configuration
@ConditionalOnClass(MyService.class)  // 類路徑存在時(shí)才生效
@ConditionalOnProperty(prefix = "app", name = "enabled", havingValue = "true")  // 屬性條件
public class MyAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean  // 用戶沒有自定義時(shí)才生效
    public MyService myService() {
        return new DefaultMyService();
    }
}

注意事項(xiàng)

  1. 加載順序問題:Bean 的創(chuàng)建順序會(huì)影響 @ConditionalOnMissingBean 的判斷結(jié)果
  2. 多個(gè)配置類:如果有多個(gè)配置類都定義了相同的 Bean,Spring 需要確定哪個(gè)配置類先加載
  3. 配合 @Primary 使用:當(dāng)有多個(gè)同類型 Bean 時(shí),可以指定哪個(gè)是主要的
@Bean
@ConditionalOnMissingBean
@Primary  // 當(dāng)有多個(gè) DataSource 時(shí),這個(gè)作為主要的
public DataSource primaryDataSource() {
    return new PrimaryDataSource();
}

總結(jié)

@ConditionalOnMissingBean 是 Spring Boot “約定優(yōu)于配置” 理念的重要實(shí)現(xiàn):

  • ? 提供開箱即用的默認(rèn)配置
  • ? 允許用戶輕松自定義和覆蓋
  • ? 避免 Bean 定義的沖突
  • ? 是 Spring Boot 自動(dòng)配置靈活性的關(guān)鍵

這種機(jī)制使得 Spring Boot 既能提供強(qiáng)大的默認(rèn)配置,又保持了高度的可定制性。

到此這篇關(guān)于Spring @ConditionalOnMissingBean 注解是做什么的的文章就介紹到這了,更多相關(guān)Spring @ConditionalOnMissingBean 注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java compiler沒有1.8怎么解決

    java compiler沒有1.8怎么解決

    這篇文章主要介紹了java compiler沒有1.8的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Java字符串去除特殊字符內(nèi)容的實(shí)例

    Java字符串去除特殊字符內(nèi)容的實(shí)例

    下面小編就為大家分享一篇Java字符串去除特殊字符內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • mybatis中mapper代理的生成過程全面分析

    mybatis中mapper代理的生成過程全面分析

    這篇文章主要為大家介紹了mybatis中mapper代理的生成過程全面分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java跨域問題的幾種后端解決方式舉例詳解

    Java跨域問題的幾種后端解決方式舉例詳解

    跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)JavaScript實(shí)施的安全限制,這篇文章主要給大家介紹了關(guān)于Java跨域問題的幾種后端解決方式的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • java序列化和serialVersionUID的使用方法實(shí)例

    java序列化和serialVersionUID的使用方法實(shí)例

    這篇文章主要介紹了java序列化和serialVersionUID的使用方法實(shí)例的相關(guān)資料,這里說明很詳細(xì)的使用方法讓你徹底學(xué)會(huì),需要的朋友可以參考下
    2017-08-08
  • 一篇文章讓你學(xué)會(huì)Java的輸入與輸出

    一篇文章讓你學(xué)會(huì)Java的輸入與輸出

    這篇文章主要介紹了Java輸入與輸出的相關(guān)資料,包括使用System.out.println()、System.out.printf()和System.out.print()進(jìn)行輸出,以及使用Scanner類和System.in.read()方法進(jìn)行輸入,需要的朋友可以參考下
    2025-03-03
  • SpringBoot整合緩存方式(Caffeine、Redis)

    SpringBoot整合緩存方式(Caffeine、Redis)

    SpringBoot整合緩存注解包括@EnableCaching、@Cachable、@CachePut和@CacheEvict,分別用于配置緩存管理器和標(biāo)記緩存操作,文章詳細(xì)介紹了整合Caffeine和Redis緩存的步驟,并展示了配置類與控制層代碼,優(yōu)點(diǎn)是快速應(yīng)用緩存,缺點(diǎn)是無法精細(xì)處理緩存
    2026-05-05
  • java實(shí)現(xiàn)隨機(jī)數(shù)生成器

    java實(shí)現(xiàn)隨機(jī)數(shù)生成器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)隨機(jī)數(shù)生成器,隨機(jī)數(shù)生成小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java常用集合與原理解析

    Java常用集合與原理解析

    這篇文章主要介紹了Java常用集合與原理解析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    文章介紹了如何在K8S容器中的Java服務(wù)上進(jìn)行遠(yuǎn)程調(diào)試,包括配置Deployment、Service以及本地IDEA的調(diào)試設(shè)置,感興趣的朋友跟隨小編一起看看吧
    2025-02-02

最新評(píng)論

平利县| 鄢陵县| 永修县| 南康市| 吉林市| 信丰县| 南康市| 乡城县| 沛县| 兴隆县| 永定县| 临洮县| 都安| 海晏县| 邹城市| 博罗县| 虎林市| 黔东| 灵川县| 新民市| 定西市| 锦州市| 昭通市| 荥阳市| 蒙自县| 平顶山市| 西安市| 大石桥市| 灵丘县| 穆棱市| 红桥区| 大邑县| 酉阳| 罗源县| 华蓥市| 新郑市| 丹凤县| 浠水县| 沙洋县| 兴义市| 松阳县|