国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 淺談SpringBoot中的@Conditional注解的使用

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

2021-07-29 11:28roseduan Java教程

這篇文章主要介紹了淺談SpringBoot中的@Conditional注解的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

概述

spring boot 中的 @conditional 注解是一個(gè)不太常用到的注解,但確實(shí)非常的有用,我們知道 spring boot 是根據(jù)配置文件中的內(nèi)容,決定是否創(chuàng)建 bean,以及如何創(chuàng)建 bean 到 spring 容器中,而 spring boot 自動(dòng)化配置的核心控制,就是 @conditional 注解。

@conditional 注解是 spring 4.0 之后出的一個(gè)注解,與其搭配的一個(gè)接口是 condition,@conditional 注解會(huì)根據(jù)具體的條件決定是否創(chuàng)建 bean 到容器中,接下來看看 @conditional 注解的簡(jiǎn)單使用。

1. @conditional 和 condition 接口搭配使用

這里需要實(shí)現(xiàn)的功能是,我們根據(jù)配置文件中的具體內(nèi)容,來決定是否創(chuàng)建 bean,首先我們?cè)?application.yml 中加上一個(gè)自定義配置:

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

這里我們決定,這個(gè)配置中包含了 product 這個(gè)字符串的時(shí)候,才創(chuàng)建 bean。product 是我自己隨便創(chuàng)建的一個(gè)實(shí)體類,你可以自行創(chuàng)建。

新建一個(gè)類 productcondition,內(nèi)容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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;
    }
  }
}

這個(gè)類實(shí)現(xiàn)了 condition 接口,這個(gè)接口只有一個(gè)方法,我們從配置文件中獲取剛才創(chuàng)建的自定義配置,如果配置中包含了 product 這個(gè)字符串,就會(huì)返回 true。

接下來創(chuàng)建一個(gè)配置類 productconfig,內(nèi)容如下:

?
1
2
3
4
5
6
7
8
9
10
11
@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();
  }
}

我們?cè)趧?chuàng)建的 bean 方法前面加上了 @conditional 注解,判斷的標(biāo)準(zhǔn)是剛才的 productcondition,如果是 true,則創(chuàng)建 bean,否則不創(chuàng)建。我們寫一個(gè)測(cè)試類,來測(cè)試一下 bean 是否被創(chuàng)建了。測(cè)試代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@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("創(chuàng)建了 bean : " + product.tostring());
      }
    }
    catch (exception e){
      log.info("發(fā)生異常,{}", e.getmessage());
      system.out.println("沒有創(chuàng)建 bean");
    }
 
  }
}

運(yùn)行測(cè)試代碼,發(fā)現(xiàn) bean 已經(jīng)創(chuàng)建了:

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

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

2. @conditionalonclass 的使用

這個(gè)注解的屬性可以跟上一個(gè)類的完整路徑或者是類的 class 對(duì)象,如果類存在,則會(huì)創(chuàng)建 bean,例如下面的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
@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();
  }
}

這個(gè)路徑下面的實(shí)體類 product 是存在的,所以會(huì)創(chuàng)建 bean,如果是一個(gè)不存在的類,則不會(huì)創(chuàng)建。

3. @conditionalonproperty 的使用

這個(gè)注解可以直接從配置文件中獲取屬性,然后做為是否創(chuàng)建 bean 的依據(jù)。例如我們?cè)?application.yml 中添加一個(gè)自定義配置:

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

productconfig 類的內(nèi)容是這樣的:

?
1
2
3
4
5
6
7
8
9
10
11
12
@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 注解,從文件中讀取配置,因?yàn)槲覀冊(cè)O(shè)置的是 true,所以這個(gè) bean 會(huì)被創(chuàng)建,如果設(shè)置成 false,則 bean 不會(huì)被創(chuàng)建,你可以自己試一下。根據(jù)這個(gè)特性,我們可以給一些特定的配置加上一個(gè)開關(guān),非常方便控制。

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

參考文檔:spring boot 官網(wǎng)文檔

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://segmentfault.com/a/1190000018777937

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本免费一区二区三区四区 | 日本高清无卡码一区二区久久 | 97国产超碰 | 国产精品成人在线观看 | 午夜在线| 午夜电影网址 | 97精品久久 | 91麻豆精品国产91久久久更新资源速度超快 | 久久免费99精品久久久久久 | 876av国产精品电影 | 久久丁香 | 欧美成在线观看 | 日韩在线视频观看 | 中文字幕在线观看一区二区 | 亚洲国产成人av | 欧美精品91| 日韩有码一区 | 国产欧美精品区一区二区三区 | 精品欧美一区二区三区久久久 | 日日久 | 91精品国产91久久久久久 | 精品香蕉视频 | 欧美一级二级三级视频 | 日韩成人免费电影 | 国产激情视频 | 一 级 黄 色 片免费网站 | 日韩欧美精品在线 | 国产精品久久久久久久久久大牛 | 国产精品视频免费观看 | 成人一区二区三区久久精品嫩草 | 波多野结衣一区二区三区中文字幕 | 久久久久久中文字幕 | 日韩看片 | 久久久成人精品 | 精品1区| 最新日韩免费 | 精品国产黄a∨片高清在线 黄色大片aaaa | 久久亚洲一区 | 免费看黄色av | 亚洲伊人久久影院 | www日韩|