@Conditional注解

簡要說明

@Conditional注解來源于org.springframework.context.annotation包中,也就是它是Spring中的注解,并不是SpringBoot的注解,他的作用是為了bean的裝載到容器中增加一個條件判斷,在滿足條件下才會裝載到容器中,這個條件的實現我們可以進行自定義的。

它存在很多擴展注解(SpringBoot對conditional注解的擴展),如下:

  • @ConditionalOnBean

  • @ConditionalOnProperty

  • @ConditionalOnClass

  • @ConditionalOnMissingBean

  • @ConditionalOnMissingClass

  • @ConditionalOnExpression

  • 。。。。

    以上的注解均來自org.springframework.boot.autoconfigure.condition包中,即都是springboot進行擴展的注解

自定義加載條件類

1.創建自定義bean加載條件的類,并實現Condition接口,重寫matches方法

public class OnXXXXXCondition implements Condition{@Overridepublic final boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {。。。。。。}
}

2.在需要添加條件加載的類或者方法是使用@Conditional注解,并將自定義加載條件類作為參數加入到@Conditional中

@Conditional(OnXXXXXCondition.class)
public @interface ConditionalOnXXXX {.....
}

SpringBoot相關注解詳解

@ConditionalOnProperty(重)

這個注解在使用場景中是頻繁和重要的,如我們自定義springboot的Starter時,增加對該組件開關的配置信息等。

@Configuration
@ConditionalOnProperty(value="xxx.yyy",havingValue="true",matchIfMissing="ture")
public class TestBean{...
}

這個條件解釋是: application.properties 或 application.yml 文件中 xxx.yyy 為 true 才會加載 TestBean 這個 Bean,如果沒有匹配上也會加載,因為 matchIfMissing = true,默認值是 false,通常設置為false。

@ConditionalOnBean 和 ConditionalOnMissingBean

有時候我們需要某個 Bean 已經存在應用上下文時才會加載,那么我們會用到 @ConditionalOnBean`注解,

@Configuration
@ConditionalOnBean(OtherBean.class)
public class TestBean{...
}

反之有時候我們需要某個 Bean 不存在于應用上下文時才會加載,那么我們會用到@ConditionalOnMissingBean 注解。

@ConditionalOnClass 和 @ConditionalOnMissingClass

和上一個用法一致,只不過判斷某個類是否存在于 classpath 中作為加載條件,@ConditionalOnClass判斷存在, @ConditionalOnMissingClass判斷不存在。

@ConditionalOnExpression

如果我們有更復雜的多個配置屬性一起判斷,那么我們就可以用這個表達式了:

@Configuration
@ConditionalOnExpression("${xxx.yyy:ture} and ${zzz.kkk}:ture")
public class TestBean{...
}

只有當兩個屬性都為 true 的時候才加載

。。。。

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

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

相關文章

FariyGUI × Cocos Creator 入門

前言 程序員向的初探Cocos Creator結和FairyGUI的使用,會比較偏向FairyGUI一點,默認各位讀者都熟練掌握Cocos Creator以及js/ts腳本編寫。 初探門徑,歡迎大佬指教,歡迎在評論區或私信與本人交流,謝謝! 下…

Linux系統安裝zookeeper

Linux安裝zookeeper 安裝zookeeper之前需要安裝jdk,確認jdk環境沒問題之后再開始安裝zookeeper 下載zookeeper壓縮包,官方下載地址:Apache Download Mirrors 將zookeeper壓縮包拷貝到Linux并解壓 # (-C 路徑)可以解壓到指定路徑 tar -zxv…

dubbo源碼中設計模式——負載均衡中模版模式的應用

模版模式介紹 在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。 使用場景:定…

Lua內存管理策略

傳統的內存管理策略主要分為兩種:引用計數,和垃圾回收。相比后者每一段時間執行一次回收周期,前者是對于每一個變量都維護被引用數的策略。對于Lua這種輕量化語言而言,占據大內存的開銷是極力避免的,而前者的方式顯然是…

singularity build用法詳解,及實例

singularity build 命令是 Singularity 中非常重要的一個功能,它允許用戶從定義文件、現有的 Singularity 容器或者其他容器平臺(如 Docker)的鏡像來構建一個新的 Singularity 容器。這個命令主要用于創建定制化的容器環境,以適應特定的應用和需求。 命令格式 singularit…

JDBC的DBUtil 和 xxxDAO 示例

DBUtil package common;import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;public class DBUtil {// 需要封裝…

C語言運用中斷子系統用驅動控制led實驗,c語言串口led點燈實驗(驅動+應用層)

中斷子系統用驅動控制led實驗 驅動代碼 #include <linux/init.h> #include <linux/module.h>#include<linux/interrupt.h> #include<linux/gpio.h> #include<linux/timer.h>#include<linux/of.h> #include<linux/of_irq.h> #inclu…

GB/T 17640-2023 長絲機織土工布檢測

長絲機織土工布是指以合成纖維長絲為原料織制而成的土工布&#xff0c;按纖維品種分為滌綸、丙綸、錦綸 等長絲機織土工布&#xff1b;按用途分為反濾布、復合用基布、管袋布、模袋布等。 GB/T 17640-2023 長絲機織土工布測試項目&#xff1a; 測試要求 測試標準 經向抗拉強…

實現律所高質量發展-Alpha法律智能操作系統

律師行業本質上屬于服務行業&#xff0c;而律師團隊作為一個獨立的服務單位&#xff0c;應當包含研發、市場、銷售、服務等單位發展的基礎工作環節。但現實中&#xff0c;很多律師團隊其實并沒有區分這些工作。鑒于此&#xff0c;上海市錦天城律師事務所醫藥大健康行業資本市場…

【備忘】幾個特殊的注冊表路徑

記錄幾個有用的注冊表路徑。防止用到忘記了。&#xff08;非教程篇&#xff09; 計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\Start 計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\WindowsLogon\HideFastUserSwitching 虛擬桌…

【SQL注入】靶場SQLI DUMB SERIES-26空格和注釋被過濾

26題提示所有的空格和注釋都會被過濾掉 輸入?id0判斷閉合方式&#xff0c;回顯報錯可以確定閉合方式為單引號 正常思路是需要通過注釋符將后面的語句注釋掉&#xff0c;但是這一關的注釋符被過濾了&#xff0c;可以考慮使用將后面的語句也閉合的思路來避免引號帶來的報錯。輸…

【區塊鏈技術——智能合約——以太坊平臺——金融交易】

引言 在如今這個高度數字化的世界中&#xff0c;金融交易趨向于使用更加先進的技術來減少交易成本&#xff0c;提高效率。區塊鏈技術的出現作為一場革命&#xff0c;尤其是其衍生技術——智能合約&#xff0c;為金融交易帶來諸多新機遇。本文將以最廣泛使用的區塊鏈平臺——以…

【leetcode】記憶化搜索

記憶化搜索 一、斐波那契數1、題目描述2、代碼3、解析 二、不同路徑1、題目描述2、代碼3、解析 三、最長遞增子序列1、題目描述2、代碼3、解析 四、猜數字大小II1、題目描述2、代碼3、解析 五、矩陣中的最長遞增路徑1、題目描述2、代碼3、解析 一、斐波那契數 1、題目描述 le…

【java】小學生數學練習題目生成系統

本文章主要是CSDN-問答板塊&#xff0c;有題主提出的問題&#xff0c;我這邊將完整代碼提供出來&#xff0c;僅供大家參考學習&#xff01; 一、效果截圖 二、直接上代碼 package com.example.dingtalk.question;import javax.script.ScriptEngine; import javax.script.Scrip…

PHP實踐:Laravel中事件使用講解

&#x1f3c6;作者簡介&#xff0c;黑夜開發者&#xff0c;CSDN領軍人物&#xff0c;全棧領域優質創作者?&#xff0c;CSDN博客專家&#xff0c;阿里云社區專家博主&#xff0c;2023年6月CSDN上海賽道top4。 &#x1f3c6;數年電商行業從業經驗&#xff0c;歷任核心研發工程師…

kafka生產者

1.原理 2.普通異步發送 引入pom&#xff1a; <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency><dependency><g…

“errcode“:40163,“errmsg“:“code been used

{"errcode":40163,"errmsg":"code been used, rid: 65d6fa01-6ae8fecc-3a2f4bf8"} 通過微信靜默授權方式&#xff0c;獲得當前微信用戶 openid 時&#xff0c;重復使用 code 造成的。 不是騰訊的問題&#xff0c;自己的代碼邏輯沒有遵循騰訊請…

2024022202-查詢優化

查詢優化 概述 關系系統和關系模型是兩個密切相關而有不同的概念。支持關系模型的數據庫管理系統稱為關系系統。但是關系模型中并非每一部分都是同等重要的&#xff0c;所以我們不苛求完全支持關系模型的系統才能稱為關系系統。因此&#xff0c;我們給出一個關系系統的最小要求…

excel數據處理——一列數據轉換為n列多行

按行抽取 如果只希望保留第一行的標題&#xff0c;然后將其他奇數行刪除&#xff0c;可以選擇一個空白列&#xff0c;為不同的行賦值&#xff0c;函數為“mod(row(),2)”&#xff1b; 這個是0,1 數列&#xff0c;如果是0,1&#xff0c;2就是“mod(row(),3)”。 行列轉換 復制…

【學習總結】慢SQL治理經驗總結

一、慢SQL定義 執行超過1s的SQL為慢SQL 三、慢SQl的風險 系統的響應時間延遲&#xff0c;影響用戶體驗 資源占用增加&#xff0c;增高了系統的負載&#xff0c;其他請求響應時間也可能會收到影響。 慢SQL占用數據庫連接的時間長,如果有大量慢SQL查詢同時執行&#xff0c;可能…