精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

強大!基于Spring Boot自定義條件動態注冊組件

開發 開發工具
當Spring Boot預設的條件注解不能滿足我們的需求時,我們還可以通過自定義的方式來實現更為復雜和特定的條件邏輯。 接下來,我們將詳細介紹有關自定義條件注解的多方面知識的應用。

環境:SpringBoot3.4.0

1. 簡介

@Conditional是Spring 4.0版本引入的一個強大注解,它允許開發者根據特定條件來決定是否創建某個Bean。該注解只有當滿足預設條件時,Spring容器才會將對應的Bean實例化并加入到應用程序的上下文中。

通過@Conditional注解,開發者可以根據不同的環境(如開發、測試、生產環境)、配置文件中的屬性、類路徑中的特定類是否存在,或者任何自定義的邏輯條件,來動態地控制Bean的創建過程。這種機制極大地提高了Spring應用程序的可配置性和靈活性,使得開發者能夠根據不同的場景和需求,智能地選擇性地裝配Bean。

@Conditional注解通常與@Configuration和@Bean注解一起使用,以標記那些需要條件化創建的Bean。在Spring Boot中,@Conditional注解更是被廣泛應用,衍生出了如@ConditionalOnProperty、@ConditionalOnBean、@ConditionalOnClass等多個便捷的條件注解,進一步簡化了條件配置的過程。

當Spring Boot預設的條件注解不能滿足我們的需求時,我們還可以通過自定義的方式來實現更為復雜和特定的條件邏輯。

接下來,我們將詳細介紹有關自定義條件注解的多方面知識的應用。

圖片圖片

2. 實戰案例

2.1 自定義Condition接口

這里我們簡單的根據配置文件中的屬性來決定是否注冊Bean對象。

public class EnvCondition implements Condition {
  @Override
  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    Environment env = context.getEnvironment();
    return "true".equals(env.getProperty("pack.api.enabled"));
  }
}

只有配置文件中的"pack.api.enabled"設置為true才會對相應的Bean進行注冊;自定義注解:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Conditional(ApiCondition.class)
public @interface ConditionalOnApi {
}

接下來,進行測試:

@RestController
@RequestMapping("/api")
@ConditionalOnApi
public class ApiController {


  @PostConstruct
  public void init() {
    System.err.println("ApiController init...") ;
  }
}

首先,配置文件不對pack.api.enabled進行配置,如果啟動容器后沒有輸出任何內容則表示我們的條件注解生效了。

圖片圖片

沒有任何的輸出:

配置文件中設置pack.api.enabled=true, 再次啟動服務

圖片

成功注冊bean。

2.2 帶參數增強實現

在上面的示例中,我們直接在代碼中硬編碼了要判斷的屬性,這種做法缺乏靈活性。因此,在該示例中,我們將采用自定義注解屬性來實現條件判斷,以增強代碼的靈活性和可配置性。

修改注解如下:

public @interface ConditionalOnApi {
  
  String value() ;
}

修改條件類:

public class ApiCondition implements Condition {
  @Override
  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    Map<String, Object> attrs = metadata.getAnnotationAttributes(
        ConditionalOnApi.class.getName()) ;
    String key = (String) attrs.get("value") ;
    Environment env = context.getEnvironment() ;
    return "true".equals(env.getProperty(key)) ;
  }
}

最后,修改使用處。

@ConditionalOnApi("pack.api.enabled")
public class ApiController {}

通過上面的改造我們的自定義條件靈活多了。

2.3 基于SpringBootCondition實現

通過繼承SpringBootCondition實現條件是官方推薦的方式。它的強大之處在于它提供了有用的日志記錄功能,以幫助用戶診斷哪些類被加載了。

自定義條件:

public class ApiMonitorCondition extends SpringBootCondition {
  private static final ConditionMessage.Builder message = ConditionMessage.forCondition("API Monitor");


  @Override
  public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
    String monitorEnabled = context.getEnvironment().getProperty("pack.api.monitor.enabled");
    if ("true".equals(monitorEnabled)) {
      return ConditionOutcome.match(message.available("開啟API監控功能"));
    }
    return ConditionOutcome.noMatch(message.because("API監控功能關閉"));
  }
}

自定義注解:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Conditional(ApiMonitorCondition.class)
public @interface ConditionalOnApiMonitor {
}

使用條件注解:

@Configuration
@ConditionalOnApiMonitor
public class ApiMonitorConfig {
}

接下來,進行測試。

首先,不配置pack.api.monitor.enabled或者設置為false,同時將debug設置為true,啟動服務控制臺輸出如下:

圖片圖片

最后,將pack.api.monitor.enabled設置為true,控制臺輸出如下:

圖片圖片

2.4 多條件組合實現

在該案例中我們將采用多個條件來進行判斷是否符合條件。我們還是使用上面的示例,條件的判斷我們不僅判斷屬性,而且還會判斷相應的類及Bean是否存在。

這里我們直接修改上面的條件注解:

public class ApiMonitorCondition extends SpringBootCondition {
  private static final ConditionMessage.Builder message = ConditionMessage.forCondition("API Monitor");
  private static final String CLASS_NAME = "com.pack.condition.test.MonitorComponent" ;


  @Override
  public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
    String monitorEnabled = context.getEnvironment().getProperty("pack.api.monitor.enabled");
    boolean enabled = "true".equals(monitorEnabled) ;
    // 判斷對應的類是否存在
    boolean isPresent = isPresent(CLASS_NAME, context.getClassLoader()) ;
    if (enabled) {
      if (isPresent) {
        try {
          // 判斷對應的bean是否存在
          ConfigurableListableBeanFactory beanFactory = context.getBeanFactory() ;
          if (beanFactory.containsBean("monitorComponent")) { 
            return ConditionOutcome.match(message.available("開啟API監控功能"));
          }
          return ConditionOutcome.noMatch(message.because("容器不存在beanName=monitorComponent的Bean對象"));
        } catch (Exception e) {
          return ConditionOutcome.noMatch(message.because("容器不存在【" + CLASS_NAME + "】類型的Bean"));
        }
      } else {
        return ConditionOutcome.match(message.because("API監控未能開啟缺少【" + CLASS_NAME + "】類"));
      }
    } else {
      return ConditionOutcome.noMatch(message.because("API監控功能關閉"));
    }
  }
  
  private static boolean isPresent(String className, ClassLoader classLoader) {
    try {
      resolve(className, classLoader);
      return true;
    }
    return false ;
  }
  private static Class<?> resolve(String className, ClassLoader classLoader) throws ClassNotFoundException {
    if (classLoader != null) {
      return Class.forName(className, false, classLoader);
    }
    return Class.forName(className);
  }
}

以上我們就完成了多個條件組件判斷。

測試結果:

圖片圖片

存在對應的類及bean時輸出如下:

圖片圖片

最終是匹配的。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-10-14 17:18:27

2025-09-26 05:00:00

2022-04-24 15:17:56

鴻蒙操作系統

2022-06-27 08:16:34

JSON格式序列化

2021-11-01 10:21:36

鴻蒙HarmonyOS應用

2009-06-24 15:13:36

自定義JSF組件

2023-02-20 15:20:43

啟動頁組件鴻蒙

2022-09-16 15:34:32

CanvasArkUI

2021-07-13 14:05:37

單點登錄頁面

2022-07-06 20:24:08

ArkUI計時組件

2022-06-30 14:02:07

鴻蒙開發消息彈窗組件

2009-06-25 14:53:35

自定義UI組件JSF框架

2022-03-01 16:09:06

OpenHarmon鴻蒙單選組件

2022-12-07 08:56:27

SpringMVC核心組件

2022-07-15 16:45:35

slider滑塊組件鴻蒙

2021-09-15 10:19:15

鴻蒙HarmonyOS應用

2023-01-03 07:40:27

自定義滑塊組件

2022-10-26 15:54:46

canvas組件鴻蒙

2022-10-25 15:12:24

自定義組件鴻蒙

2018-06-21 14:46:03

Spring Boot異步調用
點贊
收藏

51CTO技術棧公眾號

欧美女同在线观看| 国产精品视频久久久久| 免费黄色三级网站| 国外成人福利视频| 亚洲一区精品在线| 日韩女优中文字幕| 亚洲av色香蕉一区二区三区| 久久中文字幕一区二区三区| 久久综合电影一区| 黑人巨大精品欧美| 国产激情综合| 色菇凉天天综合网| 欧美精品久久久久久久久久久| av午夜在线| 不卡电影免费在线播放一区| 成人福利网站在线观看| 三级黄色在线视频| 中文字幕日韩一区二区不卡 | 亚洲精品国产第一综合99久久| 久久精品五月婷婷| 亚洲经典一区二区| 精品午夜久久福利影院| 97av视频在线| 久久久久久久福利| 国产精品x453.com| 亚洲天堂免费观看| 亚洲调教欧美在线| 欧洲精品99毛片免费高清观看 | 97在线看免费观看视频在线观看| 91制片厂在线| 日本成人小视频| 亚洲免费av网址| 成人免费毛片日本片视频| 国产亚洲亚洲国产一二区| 欧美亚洲一区二区三区四区| 亚洲欧洲日产国码无码久久99| 久久大胆人体| 亚洲一区二区三区影院| japanese在线播放| 美女羞羞视频在线观看| 中文字幕乱码亚洲精品一区| 欧美亚州在线观看| 免费播放片a高清在线观看| 成人久久久精品乱码一区二区三区| 成人免费视频97| 国产精品欧美综合亚洲| 青青草97国产精品免费观看无弹窗版| 日韩av第一页| 精品黑人一区二区三区| 免费欧美在线| 日韩av大片免费看| 伊人成年综合网| 日欧美一区二区| 国产成人精品日本亚洲专区61| 欧产日产国产69| 久久精品动漫| 国产精品精品久久久| 国产精品国产精品国产| 日本中文在线一区| 国产日韩欧美影视| 国产日韩欧美视频在线观看| 激情综合网天天干| 91视频最新| 国产成人无码www免费视频播放| 成人免费视频免费观看| 精品国产乱码久久久久| 嫩草研究院在线观看| 久久精品人人做人人爽人人 | 欧美日本三区| 午夜精品一区二区三区av| 日本熟妇色xxxxx日本免费看| 一本久道综合久久精品| 日本中文字幕成人| 国产剧情精品在线| 成人免费视频视频在线观看免费| 久久久免费看| av色图一区| 亚洲欧美区自拍先锋| 亚洲一区二区三区av无码| 中文在线8资源库| 欧美精品 国产精品| 手机看片国产精品| 亚洲小说图片视频| 久久精品精品电影网| 精品无码一区二区三区电影桃花 | 久久久久久女乱国产| 国产精品蜜臀在线观看| 欧美交换配乱吟粗大25p| 黄毛片在线观看| 欧美日韩中文字幕精品| 韩国三级在线看| 亚洲a级精品| 久久久国产精彩视频美女艺术照福利| 日韩网红少妇无码视频香港| 喷水一区二区三区| 国产伦精品一区二区三区视频免费| 色天堂在线视频| 亚洲免费在线电影| 无码人妻丰满熟妇区毛片18| 高清一区二区| 亚洲天堂免费观看| 久久高清免费视频| 精品一区二区在线免费观看| 久久另类ts人妖一区二区| 永久免费av在线| 精品福利在线视频| 日本中文字幕在线不卡| 色综合综合网| 韩国v欧美v日本v亚洲| 一级黄色片视频| 91网站在线播放| 国产成人一二三区| 久久婷婷五月综合色丁香| 日韩精品视频在线观看网址| 全网免费在线播放视频入口| 日韩av一区二区在线影视| 精品欧美日韩在线| 污污网站在线看| 欧美性色黄大片| 黄色正能量网站| 樱桃成人精品视频在线播放| 成人中文字幕在线观看| eeuss影院在线观看| 精品欧美激情精品一区| 日本一区二区免费视频| 亚洲字幕久久| 成人欧美一区二区三区在线| 超碰国产在线| 91国在线观看| 国产精品815.cc红桃| 99热这里只有成人精品国产| 97欧洲一区二区精品免费| 欧美日韩在线看片| 欧美精品亚洲二区| 夫妇露脸对白88av| 日韩av一区二区三区四区| 欧美日韩另类综合| 激情开心成人网| 亚洲欧美中文字幕在线一区| 亚洲男人第一av| 99精品久久99久久久久| 久久国产精品视频在线观看| 国产精品tv| 午夜精品久久久久久久99热| 天堂av资源在线| 亚洲高清不卡在线| 污网站免费观看| 极品尤物久久久av免费看| 99久re热视频这里只有精品6| 91极品在线| 精品国一区二区三区| 国产精品999久久久| 成a人片国产精品| 欧美 国产 综合| 免费短视频成人日韩| 国产精品国语对白| 免费a级毛片在线播放| 欧美一级日韩不卡播放免费| 色在线观看视频| 成人一区二区三区视频 | 日本aⅴ免费视频一区二区三区 | 欧美日韩综合色| 天天鲁一鲁摸一摸爽一爽| 国产乱人伦偷精品视频不卡| 成人免费在线视频播放| 欧美日韩直播| 国产精品久久久久久久9999| 色哟哟免费在线观看 | 日本不卡视频一区| 亚洲欧美卡通另类91av| 亚洲第一导航| 亚洲五码在线| 4438全国成人免费| 在线免费av电影| 精品精品国产高清a毛片牛牛| 久久亚洲精品国产| 中文字幕一区二区三区视频| 国产精品91av| 日韩精品成人一区二区三区| 久久久久亚洲av无码专区喷水| 亚洲综合网狠久久| 日韩av电影手机在线观看| 日本中文字幕在线看| 欧美成人性战久久| 精产国品一区二区| 亚洲免费成人av| 这里只有久久精品| 国产精品69久久久久水密桃| 日韩av片在线看| 一区二区蜜桃| 欧美激情一区二区三区在线视频| 伊人久久大香| 日韩av电影中文字幕| 在线电影福利片| 亚洲天堂成人在线视频| 亚洲国产精品suv| 欧美亚洲国产一卡| 日韩高清免费av| 1000精品久久久久久久久| 人妻av一区二区| 精品制服美女久久| 久久久免费视频网站| 永久亚洲成a人片777777| 少妇特黄a一区二区三区| 91嫩草精品| 91精品久久久久久久久久久| 黑人巨大精品| 久久久欧美一区二区| 免费黄网站在线| 亚洲人成电影网站色www| 高h放荡受浪受bl| 91精品一区二区三区久久久久久| 国产一卡二卡三卡| 婷婷开心激情综合| 欧美极品aaaaabbbbb| 国产精品麻豆99久久久久久| 亚洲综合色一区| 不卡一区中文字幕| 精品国产一二区| 狠狠狠色丁香婷婷综合久久五月| mm1313亚洲国产精品无码试看| 99亚洲一区二区| 国产一级不卡视频| **女人18毛片一区二区| 色综合影院在线观看| 久久综合影院| 麻豆成人小视频| 日韩av三区| 精品亚洲一区二区三区四区五区高| 日本一区二区乱| 91欧美日韩一区| 亚洲青青一区| 亚洲图片综合网| 成人激情诱惑| 久久涩涩网站| 久久久亚洲欧洲日产| αv一区二区三区| 欧美二区观看| 91|九色|视频| 日本免费一区二区视频| 亚洲xxxx3d| 国产在线一区不卡| 成人黄色av播放免费| 亚洲欧洲一二区| 亚洲自拍偷拍一区| 一区二区三区免费在线看| 91精品久久久久久蜜桃| 日韩精品一区二区三区中文在线| 91亚色免费| 国产欧美一区二区三区米奇| 狠狠色伊人亚洲综合网站色| 你懂的在线观看一区二区| 久久资源av| 国产亚洲第一伦理第一区| 欧美精品在线一区| 国内精品久久久久久久影视简单 | 尹人成人综合网| 亚瑟在线精品视频| 亚洲高潮女人毛茸茸| 国产日韩欧美a| 欧美自拍偷拍网| 最新日韩av在线| 欧美精品一区二区蜜桃| 亚洲国产日韩在线一区模特| 日韩欧美三级视频| 欧美亚洲禁片免费| 99er热精品视频| 精品av久久707| 精品影院一区| 精品国产拍在线观看| 性xxxfreexxxx性欧美| 久久久久久国产| 日本韩国欧美| 成人激情视频在线| 久久97精品| 日韩和欧美的一区二区| 天天插综合网| 欧美视频在线观看视频| 日韩高清不卡在线| gogo亚洲国模私拍人体| 26uuu色噜噜精品一区二区| 成人无码精品1区2区3区免费看 | 中文字幕亚洲二区| 在线播放免费av| 欧美亚洲视频在线看网址| 日韩成人免费av| 国内精品久久国产| 视频在线不卡免费观看| 日本丰满少妇xxxx| 另类中文字幕网| 亚洲国产第一区| 中文字幕在线不卡| 五月婷婷开心网| 日韩午夜三级在线| jizz在线观看中文| 91精品国产91久久久久久不卡| 天天综合在线观看| 欧美在线一区二区三区四区| 欧美国产专区| 国产精品视频黄色| 99视频精品免费视频| 在线观看黄网址| 在线免费一区三区| 午夜av免费在线观看| 久久亚洲精品一区| 欧美大片免费高清观看| 国产激情一区二区三区在线观看| 不卡视频在线| 男女午夜激情视频| 丁香婷婷深情五月亚洲| 黄色精品视频在线观看| 欧美视频免费在线观看| 亚洲爆乳无码一区二区三区| 综合激情国产一区| 亚洲天堂av影院| 成人91视频| 久久久五月天| 久久久久国产一区| 久久久久久日产精品| 日韩精品久久久久久久| 日韩欧美一区在线| 看黄网站在线| 国产精品视频区| 国产最新精品| 欧洲熟妇精品视频| 91蜜桃传媒精品久久久一区二区| 麻豆亚洲av成人无码久久精品| 欧美日韩大陆一区二区| 黄色网址在线播放| 国产91色在线| 视频精品在线观看| 黑人糟蹋人妻hd中文字幕| 不卡一区二区中文字幕| 日本三级免费看| 亚洲成avwww人| 精品精品导航| 国产精品一区二| 亚洲精品日韩久久| 国产一级伦理片| 天天综合日日夜夜精品| 五月婷婷狠狠干| 青青草99啪国产免费| 亚洲第一论坛sis| 久久精品99国产| 久久久久久一级片| 国产精品自拍第一页| 中日韩午夜理伦电影免费| 成人福利一区二区| 一区二区三区偷拍| 激情五月婷婷综合网| 中文字幕电影av| 欧美变态tickling挠脚心| 欧美色图天堂| 久久久久久九九九九| 青青草原综合久久大伊人精品优势| 91狠狠综合久久久久久| 欧美久久高跟鞋激| 中文字幕在线观看网站| 国产伦精品一区二区三区免费视频| 国产欧美日韩一区二区三区在线| 国产精品无码久久久久久| 91久久线看在观草草青青| 麻豆传媒在线完整视频| 国产精品xxxx| 免费亚洲一区| 成人黄色短视频| 精品成人免费观看| 香蕉视频亚洲一级| 伊人色综合久久天天五月婷| 国产福利一区二区三区| 人人干人人干人人干| 伊人成人开心激情综合网| 国产精品欧美一区二区三区不卡| 亚洲熟妇无码av在线播放| 久久亚洲精华国产精华液| 在线视频免费观看一区| 久久久久久com| 欧美一区二区三区高清视频| 超碰中文字幕在线观看| 精品福利一区二区| 蜜桃视频网站在线观看| 久久精品aaaaaa毛片| 久久97超碰色| 国产微拍精品一区| 日韩性生活视频| 欧美黄色网视频| 自拍偷拍21p| 亚洲大片在线观看| 淫片在线观看| 久久久久久九九| 国产精品一区一区三区| 永久免费无码av网站在线观看| 久久久91精品| 国产成人三级| 自拍视频第一页| 欧美综合一区二区| 久草在线视频资源| 在线视频不卡一区二区| 91麻豆国产在线观看| 国产黄a三级三级三级|