Spring @ConditionalOnMissingBean 注解的主要作用解析
@ConditionalOnMissingBean 是 Spring Boot 自動配置中一個非常常用的條件化注解,它的核心作用是:只有當指定的 Bean 在 Spring 容器中不存在時,才創(chuàng)建被標注的 Bean 或配置類。
主要作用
1.提供默認配置
Spring Boot 的自動配置大量使用該注解,為常見組件提供默認實現(xiàn)。
@Configuration
public class MyAutoConfiguration {
@Bean
@ConditionalOnMissingBean // 只有在用戶沒有定義自己的 DataSource 時,才創(chuàng)建這個默認的
public DataSource dataSource() {
return new HikariDataSource();
}
}2.允許用戶自定義 Bean 覆蓋默認配置
用戶可以定義自己的 Bean 來覆蓋 Spring Boot 的默認實現(xiàn)。
@Configuration
public class MyCustomConfig {
@Bean
public DataSource dataSource() {
// 用戶自定義的 DataSource
return new MyCustomDataSource();
// 由于這個 Bean 存在,上面的自動配置的 DataSource 就不會被創(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.指定多個 Bean 類型
@Bean
@ConditionalOnMissingBean({DataSource.class, XADataSource.class})
public DataSource dataSource() {
return new EmbeddedDataSource();
}
實際應用場景
場景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)建默認數(shù)據(jù)源
}
}場景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();
}
}注意事項
- 加載順序問題:Bean 的創(chuàng)建順序會影響
@ConditionalOnMissingBean的判斷結果 - 多個配置類:如果有多個配置類都定義了相同的 Bean,Spring 需要確定哪個配置類先加載
- 配合
@Primary使用:當有多個同類型 Bean 時,可以指定哪個是主要的
@Bean
@ConditionalOnMissingBean
@Primary // 當有多個 DataSource 時,這個作為主要的
public DataSource primaryDataSource() {
return new PrimaryDataSource();
}
總結
@ConditionalOnMissingBean 是 Spring Boot “約定優(yōu)于配置” 理念的重要實現(xiàn):
- ? 提供開箱即用的默認配置
- ? 允許用戶輕松自定義和覆蓋
- ? 避免 Bean 定義的沖突
- ? 是 Spring Boot 自動配置靈活性的關鍵
這種機制使得 Spring Boot 既能提供強大的默認配置,又保持了高度的可定制性。
到此這篇關于Spring @ConditionalOnMissingBean 注解是做什么的的文章就介紹到這了,更多相關Spring @ConditionalOnMissingBean 注解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring mvc中直接注入的HttpServletRequst安全嗎
這篇文章主要給大家介紹了關于spring mvc中直接注入的HttpServletRequst是不是安全的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2018-04-04
基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng)
這篇文章主要為大家詳細介紹了基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07
Java使用自定義注解實現(xiàn)函數(shù)測試功能示例
這篇文章主要介紹了Java使用自定義注解實現(xiàn)函數(shù)測試功能,結合實例形式分析了java自定義注解在函數(shù)測試過程中相關功能、原理與使用技巧,需要的朋友可以參考下2019-10-10
SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用
本文主要介紹了SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-04-04

