學習springboot-條件化配置@Conditional(條件注解)

前言

在Spring Boot中,@Conditional 注解及其相關注解是用于條件化配置的重要工具。它們允許開發者根據特定條件決定是否加載某個Bean或配置類。

注意:@Conditional 相關注解,通常和@Bean搭配使用

學習springboot-Bean管理(Bean 注冊,Bean 掃描)_springboot 類掃描 工具-CSDN博客

學習springboot 的自動配置原理-CSDN博客


以下是一些與@Conditional相關的核心注解及其說明:

1. @Conditional(條件注解)

作用:這是一個基礎注解,用于定義條件化的Bean加載。它需要配合具體的條件類使用。
使用場景通常不單獨使用,而是通過擴展Condition接口來實現具體的條件邏輯。

實例

@Bean
@Conditional(MyCondition.class)
public MyBean myBean() {return new MyBean();
}

2 .@ConditionalOnClass(基于類存在條件)

作用:只有當指定的類在類路徑中存在時,才加載該Bean或配置類。
使用場景:常用于依賴某些庫的場景,例如只有當某個框架的類存在時才啟用相關功能。

實例

@Configuration
@ConditionalOnClass(MyDependencyClass.class)
public class MyConfiguration {@Beanpublic MyBean myBean() {return new MyBean();}
}

3.@ConditionalOnMissingClass(基于類缺失條件)

作用:只有當指定的類在類路徑中不存在時,才加載該Bean或配置類。
使用場景:用于在某些依賴不存在時啟用備用邏輯。

實例

@Configuration
@ConditionalOnMissingClass("com.example.MyDependencyClass")
public class MyFallbackConfiguration {@Beanpublic MyFallbackBean myFallbackBean() {return new MyFallbackBean();}
}

4.@ConditionalOnBean(基于Bean存在條件)

作用:只有當指定的Bean在Spring容器中存在時,才加載該Bean或配置類。
使用場景:用于依賴其他Bean的場景,確保某些功能只有在相關組件存在時才啟用。

實例

@Configuration
@ConditionalOnBean(MyService.class)
public class MyServiceConfiguration {@Beanpublic MyServiceClient myServiceClient(MyService myService) {return new MyServiceClient(myService);}
}

?5.@ConditionalOnMissingBean(基于Bean缺失條件)

作用:只有當指定的Bean在Spring容器中不存在時,才加載該Bean或配置類。
使用場景:用于提供默認實現,但允許用戶通過自定義Bean覆蓋默認行為。

實例

@Configuration
@ConditionalOnMissingBean(MyService.class)
public class DefaultMyServiceConfiguration {@Beanpublic MyService myService() {return new DefaultMyService();}
}

6.@ConditionalOnProperty(基于屬性條件)

作用:根據配置文件中的屬性值決定是否加載該Bean或配置類。
使用場景:用于根據配置動態啟用或禁用某些功能。

實例

@Configuration
@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true")
public class MyFeatureConfiguration {@Beanpublic MyFeatureBean myFeatureBean() {return new MyFeatureBean();}
}

7.@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication

作用:
@ConditionalOnWebApplication:僅在Web應用上下文中加載。
@ConditionalOnNotWebApplication:僅在非Web應用上下文中加載。
使用場景:用于區分Web應用和非Web應用的配置。

實例

@Configuration
@ConditionalOnWebApplication
public class WebSpecificConfiguration {@Beanpublic WebSpecificBean webSpecificBean() {return new WebSpecificBean();}
}

8.@ConditionalOnSingleCandidate(基于單一候選Bean條件)

作用:只有當指定的Bean在Spring容器中是唯一的候選Bean時,才加載該Bean或配置類。
使用場景:用于確保某個Bean的唯一性,避免沖突。

實例

@Configuration
@ConditionalOnSingleCandidate(MyService.class)
public class MyServiceConfiguration {@Beanpublic MyServiceClient myServiceClient(MyService myService) {return new MyServiceClient(myService);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79410.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年- H18-Lc126-54.螺旋矩陣(矩陣)---java版

1.題目描述 2.思路* 思路1: 補充2: directions[1][0] // 表示“下”這個方向的行增量(1) directions[1][1] // 表示“下”這個方向的列增量(0) int[][] directions {{0, 1}, {1, 0}, {0, -1}, {-…

微信小程序連續多個特殊字符自動換行解決方法

效果圖 .wxml <view class"container"><text>沒轉換{{text}}</text><view style"height: 60rpx;" /><text>轉換后{{convert}}</text> </view>.js Page({data: {text:&#xff01;&#xff01;&#xff01;&am…

編程速遞-RAD Studio 12.3 Athens四月補丁:關注軟件性能的開發者,安裝此補丁十分必要

2025年4月22日&#xff0c;Embarcadero發布了針對RAD Studio 12.3、Delphi 12.3以及CBuilder 12.3的四月補丁。此更新旨在提升這些產品的質量&#xff0c;特別關注于Delphi編譯器、C 64位現代工具鏈、RAD Studio 64位IDE及其調試器、VCL庫和其他RAD Studio特性。強烈建議所有使…

Linux 進程基礎(二):操作系統

目錄 一、什么是操作系統&#xff1a;用戶和電腦之間的「翻譯官」&#x1f310; OS 的層狀結構&#x1f9e9; 案例解析&#xff1a;雙擊鼠標的「跨層之旅」 二、操作系統的必要性探究&#xff1a;缺乏操作系統的環境面臨的挑戰剖析&#x1f511; OS 的「管理者」屬性&#xff1…

第 11 屆藍橋杯 C++ 青少組中 / 高級組省賽 2020 年真題,選擇題詳細解釋

一、選擇題 第 2 題 在二維數組按行優先存儲的情況下&#xff0c;元素 a[i][j] 前的元素個數計算如下&#xff1a; 1. **前面的完整行**&#xff1a;共有 i 行&#xff0c;每行 n 個元素&#xff0c;總計 i * n 個元素。 2. **當前行的前面元素**&#xff1a;在行內&#x…

1??7??three.js_OrbitControls相機控制器

17、相機軌道控制器 3D虛擬工廠在線體驗相機軌道控制器OrbitControls 它是 Three.js 中最常用的交互控制器之一,專門用于通過鼠標/觸摸控制相機圍繞一個目標點(target)旋轉、縮放和平移。import {OrbitControls } from three/addons/controls/OrbitControls.js; const cont…

以下是在 Ubuntu 上的幾款PDF 閱讀器,涵蓋輕量級、功能豐富和特色工具:

默認工具&#xff1a;Evince&#xff08;GNOME 文檔查看器&#xff09; 特點&#xff1a;Ubuntu 預裝&#xff0c;輕量快速&#xff0c;支持基本標注和書簽。 安裝&#xff1a;已預裝&#xff0c;或手動安裝&#xff1a; sudo apt install evince功能全面&#xff1a;Okular&…

基于用戶場景的汽車行駛工況構建:數據驅動下的能耗優化革命

行業現狀&#xff1a;標準工況與用戶場景的割裂 全球汽車行業普遍采用WLTC工況進行能耗測試&#xff0c;但其與真實道路場景差異顯著。據研究&#xff0c;WLTC工況下車輛能耗數據比實際道路低10%-30%&#xff0c;導致用戶對續航虛標投訴激增&#xff08;數據來源&#xff1a;東…

chili3d調試10 網頁元素css node deepwiki 生成圓柱體 生成零件圖片

.input是input的外框&#xff0c;.input input是input的內框 沙雕 全部input都換成textarea了 自己的方法用接口定義&#xff0c;把自己的方法pub出去&#xff0c;定義在內部拉出去只是取個值 這其實是mainwindow端pub回來的 窗口pub端把數據pub回 mainwindow端讓mainwindow端…

Redis 啟用 TLS 加密傳輸配置

Redis 啟用 TLS 加密傳輸配置 一、Redis TLS 加密概述 Redis 從 6.0 版本開始原生支持 TLS 加密傳輸&#xff0c;可以保護客戶端與服務器之間的通信安全&#xff0c;防止數據被竊聽或篡改。 二、準備工作 確認 Redis 版本?&#xff1a; redis-server --version確保版本 ≥…

【Linux】深入理解程序地址空間

&#x1f31f;&#x1f31f;作者主頁&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所屬專欄&#xff1a;Linux 目錄 前言 一、什么是程序地址空間 二、深入理解程序地址空間 1. 引例 2. 理解地址轉化 3. 再談程序地址空間 4. 補充知識 總結 前言 在現代操作系…

【深度學習-Day 5】Python 快速入門:深度學習的“瑞士軍刀”實戰指南

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

解決在 Linux 中 WPS 字體缺失問題

解決在 Linux 中 WPS 字體缺失問題 安裝方式 安裝方式 首先下載你所需要的字體文件 在字體文件所在的目錄下右鍵點擊在命令行中打開 或 Open in Terminal sudo mkdir /usr/share/fonts/myfontssudo cp ./* /usr/share/fonts/myfonts執行命令&#xff0c;更新字體緩存 sudo fc…

668SJBH報刊發行系統

1 前言 隨著我國信息產業的迅猛發展&#xff0c;手工管理方式已不適應社務管理的要求&#xff0c;報社的日常管理正面臨著信息化的挑戰&#xff0c;采用計算機管理以提高服務質量和管理水平勢在必行。發行管理是社務管理的一個重要組成部分&#xff0c;是報社和客戶聯系的紐帶…

K8S - 從零構建 Docker 鏡像與容器

一、基礎概念 1.1 鏡像&#xff08;Image&#xff09; “軟件的標準化安裝包” &#xff0c;包含代碼、環境和配置的只讀模板。 技術解析 鏡像由多個層組成&#xff0c;每層對應一個Dockerfile指令&#xff1a; 應用代碼 → 運行時環境 → 系統工具鏈 → 啟動配置核心特性…

better_fbx 下載

目錄 v6.0.5下載&#xff1a; better_fbx 下載 v6.0.5下載&#xff1a; Blender FBX模型導入導出插件 Better FBX Importer & Exporter V6.0.5V5.4.10 For Blender 2.8 | 齲齒一號GFXCamp better_fbx 下載 How To Install Launch Blender, navigate to Edit->User P…

Spring AOP 典型應用場景

AOP 典型應用場景 1. 日志記錄&#xff08;Logging&#xff09;代碼實現 2. 權限校驗&#xff08;Authentication&#xff09;代碼實現 3. 性能監控&#xff08;Performance Monitoring&#xff09;代碼實現 4. 緩存處理&#xff08;Caching&#xff09;代碼實現 5. 重試機制&a…

開始一個vue項目-day2

這次新增的功能有&#xff1a; 1、使用cookie存儲token 參考網站:https://vueuse.org/ 安裝包&#xff1a; npm i vueuse/integrations npm i universal-cookie^7 2、cookie的設置讀取和刪除&#xff0c;代碼&#xff1a;composables/auth.js import { useCookies } from …

「Mac暢玩AIGC與多模態18」開發篇14 - 多字段輸出與結構控制工作流示例

一、概述 本篇在輸入變量基礎上,演示如何通過執行 LLM 節點輸出多個結構化字段,并傳遞至結束節點。開發人員將掌握如何配置結構化輸出格式,實現提示詞與字段的準確映射,為后續引入條件判斷、循環結構等邏輯控制建立結構輸出規范基礎。 二、環境準備 macOS 系統Dify 平臺已…

JWT解析

什么是JWT JSON Web Token &#xff08;JWT&#xff09; 是一種開放標準 &#xff08;RFC 7519&#xff09;&#xff0c;它定義了一種緊湊且獨立的方式&#xff0c;用于在各方之間以 JSON 對象的形式安全地傳輸信息。此信息可以驗證和信任&#xff0c;因為它是經過數字簽名的。…