中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot @Condition 注解,組合條件你知道嗎

發布時間:2020-08-07 21:10:18 來源:網絡 閱讀:469 作者:日拱一兵 欄目:編程語言

上一篇文章 你應該知道的 @ConfigurationProperties 注解的使用姿勢,這一篇就夠了 介紹了如何通過 @ConfigurationProperties 注解靈活讀取配置屬性,這篇文章將介紹如何靈活配置 Spring Bean

寫在前面

當我們構建一個 Spring 應用的時候,有時我們想在滿足指定條件的時候才將某個 bean 加載到應用上下文中, 在Spring 4.0 時代,我們可以通過 @Conditional 注解來實現這類操作
Spring Boot @Condition 注解,組合條件你知道嗎

我們看到 @Conditional 注解接收的參數是 extends Condition 接口的泛型類,也就是說,我們要使用 @Conditional 注解,只需要實現 Condition 接口并重寫其方法即可:
Spring Boot @Condition 注解,組合條件你知道嗎

看到接口的 matches 方法返回的是 boolean 類型,是不是和我們自定義 validation annotation 有些類似,都是用來判斷是否滿足指定條件。另外注意看,以上注解和接口都在 org.springframework.context.annotation package 中

終于到了 Spring Boot 時代,在這個全新的時代,Spring Boot 在 @Conditional 注解的基礎上進行了細化,無需出示復雜的介紹信 (實現 Condition 接口),只需要手持預定義好的 @ConditionalOnXxxx 注解印章的門票,如果驗證通過,就會走進 Application Context 大廳

注解詳解

Spring Boot 對 @Conditional 注解為我們做了細化,這些注解都定義在 org.springframework.boot.autoconfigure.condition package 下
Spring Boot @Condition 注解,組合條件你知道嗎

逐個打開這 13 個注解,我們發現這些注解上有相同的元注解:
Spring Boot @Condition 注解,組合條件你知道嗎

從這些標記上我們可以了解如下內容:

  • 都可以應用在 TYPE 上,也就是說,Spring 自動掃描的一切類 (@Configuration, @Component, @Service, @Repository, or @Controller) 都可以通過添加相應的 @ConditionalOnXxxx 來判斷是否加載

  • 都可以應用在 METHOD 上,所以有 @Bean 標記的方法也可以應用這些注解

  • 都是用了 @Conditional 注解來標記,OnBeanCondition 等自定義 Condition 還是實現了 Condition 接口的,換湯不換藥,沒什么神秘的,只不過做了更具象的封裝罷了,來看類依賴圖:

Spring Boot @Condition 注解,組合條件你知道嗎

其實看這些注解字面意思已經能理解這些注解的含義,但是我們還是要說明具體的使用以及一些注意事項,我按照個人使用頻次由高到低講解:

@ConditionalOnProperty

毫無疑問這個注解是榜首
Spring Boot @Condition 注解,組合條件你知道嗎

這個條件解釋是: application.properties 或 application.yml 文件中 mybean.enable 為 true 才會加載 MyCondition 這個 Bean,如果沒有匹配上也會加載,因為 matchIfMissing = true,默認值是 false。
Spring Boot @Condition 注解,組合條件你知道嗎

@ConditionalOnBean 和 ConditionalOnMissingBean

有時候我們需要某個 Bean 已經存在應用上下文時才會加載,那么我們會用到 @ConditionalOnBean 注解:
Spring Boot @Condition 注解,組合條件你知道嗎

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

@ConditionalOnClass 和 @ConditionalOnMissingClass

不要嫌我廢話,和上面的一樣,只不過判斷某個類是否存在于 classpath 中,這就不做過多說明了

@ConditionalOnExpression

如果我們有更復雜的多個配置屬性一起判斷,那么我們就可以用這個表達式了:
Spring Boot @Condition 注解,組合條件你知道嗎

只有當兩個屬性都為 true 的時候才加載 MyModule,到這里要順便揭曉上一篇文章 你應該知道的 @ConfigurationProperties 注解的使用姿勢,這一篇就夠了 靈魂追問 3,其中 :true 就是: 如果沒有為該屬性設置值,則為該屬性設置默認值true, 其實這就是@Vaue 注解的規范,一切 SpEL 都可以應用在這里.

寫到這,我常用的已經用完了,還要硬著頭皮介紹其他幾個內容

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

廉江市| 若尔盖县| 全南县| 营口市| 大同县| 渭源县| 洛南县| 祁阳县| 房山区| 柳江县| 芜湖县| 米脂县| 靖宇县| 保靖县| 盐津县| 正蓝旗| 建昌县| 通许县| 南江县| 修文县| 咸阳市| 吉隆县| 电白县| 青浦区| 长泰县| 铜山县| 襄垣县| 宝坻区| 同仁县| 英山县| 阳信县| 鹿泉市| 正宁县| 鲁山县| 张家口市| 伊通| 保康县| 泊头市| 大田县| 克拉玛依市| 仲巴县|