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

溫馨提示×

溫馨提示×

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

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

Spring中如何使用@Conditional條件注解

發布時間:2021-07-22 16:20:07 來源:億速云 閱讀:194 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關Spring中如何使用@Conditional條件注解,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、@Conditional的源碼

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Conditional {  /**   * All {@link Condition Conditions} that must {@linkplain Condition#matches match}   * in order for the component to be registered.   */  Class<? extends Condition>[] value();}

從源碼中可以看到,@Conditional注解可以用在類和方法上,需要傳入一個實現了Condition接口class數組。

二、代碼示例

下面將以不同的操作系統為條件,通過實現Condition接口,并重寫其matches方法來構造判斷條件。若在Windows系統下運行程序,則輸出列表命令為dir;若在Linux系統下運行程序,則輸出列表命令為ls。

1.判斷條件類的定義

(1).判斷Windows的條件

package com.study.day01;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;/** * @Auther: lifq * @Description: */public class WindowsCondition implements Condition {  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {    return context.getEnvironment().getProperty("os.name").contains("Windows");  }}

(2).判斷Linux的條件

package com.study.day01;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;/** * @Auther: lifq * @Description: */public class LinuxCondition implements Condition {  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {    return context.getEnvironment().getProperty("os.name").contains("Linux");  }}

2.不同系統下的Bean的類

(1).接口代碼

package com.study.day01;import org.springframework.stereotype.Service;/** * @Auther: lifq * @Description: */public interface ListService {  public String showListCmd();}

(2).Windows實現類代碼

package com.study.day01;/** * @Auther: lifq * @Description: */public class WindowsService implements ListService {  public String showListCmd() {    return "dir";  }}

(3).Linux實現類代碼

package com.study.day01;/** * @Auther: lifq * @Description: */public class LinuxService implements ListService {  public String showListCmd() {    return "ls";  }}

3.配置類

package com.study.day01;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Conditional;import org.springframework.context.annotation.Configuration;/** * @Auther: lifq * @Description: */@Configurationpublic class Config {  @Bean  @Conditional(WindowsCondition.class)  public ListService window() {    return new WindowsService();  }  @Bean  @Conditional(LinuxCondition.class)  public ListService linux() {    return new LinuxService();  }}

4.運行類

package com.study.day01;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** * @Auther: lifq * @Description: */public class Main01 {  public static void main (String []args) {    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);    ListService listService = applicationContext.getBean(ListService.class);    System.out.println(applicationContext.getEnvironment().getProperty("os.name") + "系統下的列表命令為:" + listService.showListCmd());  }}

我的是Windows操作系統,輸出結果為dir,運行截圖如下:

運行截圖

@Conditional注解例子演示完成,有問題歡迎留言溝通哦!

完整源碼地址:https://github.com/suisui2019/springboot-study

三、@Conditional的擴展注解

@ConditionalOnBean:僅僅在當前上下文中存在某個對象時,才會實例化一個Bean。  @ConditionalOnClass:某個class位于類路徑上,才會實例化一個Bean。  @ConditionalOnExpression:當表達式為true的時候,才會實例化一個Bean。  @ConditionalOnMissingBean:僅僅在當前上下文中不存在某個對象時,才會實例化一個Bean。  @ConditionalOnMissingClass:某個class類路徑上不存在的時候,才會實例化一個Bean。  @ConditionalOnNotWebApplication:不是web應用,才會實例化一個Bean。  @ConditionalOnBean:當容器中有指定Bean的條件下進行實例化。  @ConditionalOnMissingBean:當容器里沒有指定Bean的條件下進行實例化。  @ConditionalOnClass:當classpath類路徑下有指定類的條件下進行實例化。  @ConditionalOnMissingClass:當類路徑下沒有指定類的條件下進行實例化。  @ConditionalOnWebApplication:當項目是一個Web項目時進行實例化。  @ConditionalOnNotWebApplication:當項目不是一個Web項目時進行實例化。  @ConditionalOnProperty:當指定的屬性有指定的值時進行實例化。  @ConditionalOnExpression:基于SpEL表達式的條件判斷。  @ConditionalOnJava:當JVM版本為指定的版本范圍時觸發實例化。  @ConditionalOnResource:當類路徑下有指定的資源時觸發實例化。  @ConditionalOnJndi:在JNDI存在的條件下觸發實例化。  @ConditionalOnSingleCandidate:當指定的Bean在容器中只有一個,或者有多個但是指定了首選的Bean時觸發實例化。

看完上述內容,你們對Spring中如何使用@Conditional條件注解有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

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

AI

屯门区| 和林格尔县| 搜索| 石棉县| 闽清县| 正蓝旗| 龙陵县| 青岛市| 台北市| 建德市| 枣庄市| 湄潭县| 故城县| 二连浩特市| 蒙山县| 三原县| 玉龙| 北辰区| 肇州县| 武宁县| 华蓥市| 英德市| 濮阳市| 平潭县| 突泉县| 波密县| 阳新县| 寻乌县| 高阳县| 宝兴县| 吉安市| 佛坪县| 娱乐| 德格县| 河东区| 中牟县| 泾阳县| 嘉荫县| 凤山县| 平利县| 托里县|