91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

淺談SpringBoot中的@Conditional注解的使用

發布時間:2020-10-18 13:16:32 來源:腳本之家 閱讀:147 作者:roseduan 欄目:編程語言

概述

Spring boot 中的 @Conditional 注解是一個不太常用到的注解,但確實非常的有用,我們知道 Spring Boot 是根據配置文件中的內容,決定是否創建 bean,以及如何創建 bean 到 Spring 容器中,而 Spring boot 自動化配置的核心控制,就是 @Conditional 注解。

@Conditional 注解是 Spring 4.0 之后出的一個注解,與其搭配的一個接口是 Condition,@Conditional 注解會根據具體的條件決定是否創建 bean 到容器中,接下來看看 @Conditional 注解的簡單使用。

1. @Conditional 和 Condition 接口搭配使用

這里需要實現的功能是,我們根據配置文件中的具體內容,來決定是否創建 bean,首先我們在 application.yml 中加上一個自定義配置:

淺談SpringBoot中的@Conditional注解的使用

這里我們決定,這個配置中包含了 product 這個字符串的時候,才創建 bean。Product 是我自己隨便創建的一個實體類,你可以自行創建。

新建一個類 ProductCondition,內容如下:

public class ProductCondition implements Condition {
  @Override
  public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
    //從配置文件中獲取屬性
    String property = conditionContext.getEnvironment().getProperty("create.bean");
    if (property != null){
      return property.contains("product");
    }
    else {
      return false;
    }
  }
}

這個類實現了 Condition 接口,這個接口只有一個方法,我們從配置文件中獲取剛才創建的自定義配置,如果配置中包含了 product 這個字符串,就會返回 true。

接下來創建一個配置類 ProductConfig,內容如下:

@Configuration
public class ProductConfig {

  @Conditional(ProductCondition.class)
  @Bean(name = "product")
  public Product createProd(){
    return Product.builder().id(12312).categoryId(12).
        productName("Mac Book Pro").productImg("prod.png")
        .productPrice(18000).build();
  }
}

我們在創建的 bean 方法前面加上了 @Conditional 注解,判斷的標準是剛才的 ProductCondition,如果是 true,則創建 bean,否則不創建。我們寫一個測試類,來測試一下 bean 是否被創建了。測試代碼如下:

@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class ProductConfigTest {

  @Test
  public void createProd() {
    try {
      Product product = SpringContextUtil.getBean("product", Product.class);
      if (product != null){
        System.out.println("創建了 bean : " + product.toString());
      }
    }
    catch (Exception e){
      log.info("發生異常,{}", e.getMessage());
      System.out.println("沒有創建 bean");
    }

  }
}

運行測試代碼,發現 bean 已經創建了:

淺談SpringBoot中的@Conditional注解的使用

如果把 application.yml 中的配置改一下,不包含 product 這個字符串,那么返回的是 false,bean 則不會被創建,你可以試一下。

2. @ConditionalOnClass 的使用

這個注解的屬性可以跟上一個類的完整路徑或者是類的 Class 對象,如果類存在,則會創建 bean,例如下面的例子:

@Configuration
public class ProductConfig {

  @ConditionalOnClass(name = "com.roseduan.demo.entity.Product")
  @Bean(name = "product")
  public Product createProd(){

    return Product.builder().id(12312).categoryId(12).
        productName("Mac Book Pro").productImg("prod.png")
        .productPrice(18000).build();
  }
}

這個路徑下面的實體類 Product 是存在的,所以會創建 bean,如果是一個不存在的類,則不會創建。

3. @ConditionalOnProperty 的使用

這個注解可以直接從配置文件中獲取屬性,然后做為是否創建 bean 的依據。例如我們在 application.yml 中添加一個自定義配置:

淺談SpringBoot中的@Conditional注解的使用

ProductConfig 類的內容是這樣的:

@Configuration
public class ProductConfig {

  @ConditionalOnProperty(value = "create.product.bean")
  @Bean(name = "product")
  public Product createProd(){

    return Product.builder().id(12312).categoryId(12).
        productName("Mac Book Pro").productImg("prod.png")
        .productPrice(18000).build();
  }
}

這里使用了 @ConditionalOnProperty 注解,從文件中讀取配置,因為我們設置的是 true,所以這個 bean 會被創建,如果設置成 false,則 bean 不會被創建,你可以自己試一下。根據這個特性,我們可以給一些特定的配置加上一個開關,非常方便控制。

這里我只是列舉了幾個常用的注解,你可以查看官方文檔,里面有更詳細的說明:

參考文檔:Spring Boot 官網文檔

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

呼伦贝尔市| 克什克腾旗| 平凉市| 抚顺县| 漳平市| 龙里县| 荆门市| 扶沟县| 蛟河市| 清丰县| 邳州市| 安国市| 施秉县| 北安市| 两当县| 慈溪市| 永平县| 富阳市| 万宁市| 西青区| 中山市| 广安市| 阿合奇县| 莲花县| 礼泉县| 葫芦岛市| 桂平市| 融水| 绩溪县| 湖北省| 南溪县| 昂仁县| 林周县| 凤冈县| 社旗县| 蓬莱市| 林口县| 丰原市| 祁阳县| 五河县| 庄浪县|