最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中@Conditional注解用法詳解

 更新時間:2023年11月27日 08:30:43   作者:IT技術(shù)分享社區(qū)  
這篇文章主要介紹了Spring中@Conditional注解用法詳解,@Conditional是Spring4版本新提供的一種注解,它的作用是按照設(shè)定的條件進(jìn)行判斷,把滿足判斷條件的bean注冊到Spring容器,需要的朋友可以參考下

1、@Conditional注解介紹

@Conditional是Spring4版本新提供的一種注解

它的作用是按照設(shè)定的條件進(jìn)行判斷,把滿足判斷條件的bean注冊到Spring容器。

2、@Conditional的源碼

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @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可以作用在方法上,也可以作用在類上。
  • 使用的時候需要傳入實(shí)現(xiàn)Condition接口類數(shù)組。
  • 如果是類和方法都加了@Conditional注解,最終在方法上的注解為最終的條件,如果返回true則加入容器,反之不會加入容器。
  • 如果只是類上加了@Conditional注解,整個類的所有方法都會加入容器中。

3、用法示例

3.1 新建Book.java 文件

package com.spring.bean;
 
 
public class Book {
    private String bookName;
    private String bookType;
    private double price;
 
 
    public Book(String bookName, String bookType, double price) {
        this.bookName = bookName;
        this.bookType = bookType;
        this.price = price;
    }
 
 
    public String getBookName() {
        return bookName;
    }
 
 
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
 
 
    public String getBookType() {
        return bookType;
    }
 
 
    public void setBookType(String bookType) {
        this.bookType = bookType;
    }
 
 
    public double getPrice() {
        return price;
    }
 
 
    public void setPrice(double price) {
        this.price = price;
    }
 
 
    @Override
    public String toString() {
        return "Book{" +
                "bookName='" + bookName + '\'' +
                ", bookType='" + bookType + '\'' +
                ", price=" + price +
                '}';
    }
}

3.2 CNCondition.java 文件

package com.spring.condition;
 
 
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
 
 
public class CNCondition implements Condition {
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        // user.language=CN 表示中文返回 true
        return conditionContext.getEnvironment().getProperty("user.language").contains("cn");
    }
}

3.3 ZHCondition.java 文件

package com.spring.condition;
 
 
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
 
 
public class ZHCondition implements Condition {
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        // user.language=ZH Java默認(rèn)語言 表示中文返回 true
        return conditionContext.getEnvironment()
        .getProperty("user.language").contains("zh");
    }
}

3.4 新建TestConditionalConfig.java 配置文件

package com.spring.config;
 
 
import com.spring.bean.Book;
import com.spring.condition.CNCondition;
import com.spring.condition.ZHCondition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
 
 
@Configuration
@Conditional(ZHCondition.class)
 
 
public class TestConditionalConfig {
    @Bean
    @Conditional(ZHCondition.class)//中文
    public Book bookZH()    {
        return new Book("紅樓夢","中國古典書籍",99.9);
    }
 
 
    @Bean
    @Conditional(CNCondition.class)//英文
    public Book bookCN()    {
        return new Book("哈姆雷特","外國經(jīng)典名著",66.6);
    }
}

3.5 新建TestConditional.java 測試文件

package com.spring.test;
 
 
import com.spring.bean.Book;
import com.spring.config.TestConditionalConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 
import java.util.Map;
 
 
public class TestConditional {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(TestConditionalConfig.class);
        Map<String, Book> map = annotationContext.getBeansOfType(Book.class);
        System.out.println(map);
    }
}

4、@Conditional應(yīng)用場景

在一些需要條件滿足才是實(shí)例化的類中,使用此注解

比如項(xiàng)目中需要根據(jù)不同的場景使用不同的消息中間件,在消息隊(duì)列的實(shí)例化bean上,使用@Conditional注解,根據(jù)配置文件的不同,來判斷哪個bean需要加載到Spring容器中。

5、@Conditional的擴(kuò)展注解

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

到此這篇關(guān)于Spring中@Conditional注解用法詳解的文章就介紹到這了,更多相關(guān)@Conditional注解用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Reactor如何優(yōu)雅Exception異常處理

    詳解Reactor如何優(yōu)雅Exception異常處理

    初識響應(yīng)式編程的時候,除了從命令式的思維方式轉(zhuǎn)變?yōu)楹瘮?shù)式的編程方式外,其中有一個很大的不適應(yīng)的地方就是在面對異常時該怎么處理。本文將通過Project?Reactor的文檔以及源碼來深入解讀,在reactor中是如何優(yōu)雅地實(shí)現(xiàn)這異常處理三板斧,希望對大家有所幫助
    2023-02-02
  • java能寫爬蟲程序嗎

    java能寫爬蟲程序嗎

    在本篇文章里小編給大家整理的是一篇關(guān)于java是否能寫爬蟲程序的一篇文章,對此有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • java非公平鎖知識點(diǎn)實(shí)例詳解

    java非公平鎖知識點(diǎn)實(shí)例詳解

    在本篇文章里小編給大家整理了一篇關(guān)于java非公平鎖知識點(diǎn)實(shí)例詳解,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-10-10
  • ES6學(xué)習(xí)筆記之新增數(shù)據(jù)類型實(shí)例解析

    ES6學(xué)習(xí)筆記之新增數(shù)據(jù)類型實(shí)例解析

    這篇文章主要介紹了ES6學(xué)習(xí)筆記之新增數(shù)據(jù)類型,結(jié)合實(shí)例形式分析了ES6數(shù)據(jù)解構(gòu)賦值、新增數(shù)據(jù)類型Set集合、新增數(shù)據(jù)類型Map、Symbol類型等相關(guān)原理與操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • Java String不可變性實(shí)現(xiàn)原理解析

    Java String不可變性實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java String不可變性實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 基于Spring-cloud-gateway實(shí)現(xiàn)全局日志記錄的方法

    基于Spring-cloud-gateway實(shí)現(xiàn)全局日志記錄的方法

    最近項(xiàng)目在線上運(yùn)行出現(xiàn)了一些難以復(fù)現(xiàn)的bug需要定位相應(yīng)api的日志,通過nginx提供的api請求日志難以實(shí)現(xiàn),于是在gateway通過全局過濾器記錄api請求日志,本文給大家介紹基于Spring-cloud-gateway實(shí)現(xiàn)全局日志記錄,感興趣的朋友一起看看吧
    2023-11-11
  • SpringBoot集成Druid實(shí)現(xiàn)監(jiān)控功能的示例代碼

    SpringBoot集成Druid實(shí)現(xiàn)監(jiān)控功能的示例代碼

    這篇文章主要介紹了SpringBoot集成Druid實(shí)現(xiàn)監(jiān)控功能,Druid是阿里巴巴開發(fā)的號稱為監(jiān)控而生的數(shù)據(jù)庫連接池,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,天生就是針對監(jiān)控而生的DB連接池,文中通過代碼示例講解非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • SpringBoot實(shí)現(xiàn)各種參數(shù)校驗(yàn)總結(jié)(建議收藏!)

    SpringBoot實(shí)現(xiàn)各種參數(shù)校驗(yàn)總結(jié)(建議收藏!)

    本文深入解析了Spring?Validation的使用方法、實(shí)現(xiàn)原理及最佳實(shí)踐,詳細(xì)介紹了各種參數(shù)校驗(yàn)場景,如requestBody和requestParam/PathVariable的使用,并探討了分組校驗(yàn)、嵌套校驗(yàn)和自定義校驗(yàn)的高級應(yīng)用,需要的朋友可以參考下
    2024-09-09
  • springboot配置log日志按天按類緩存實(shí)現(xiàn)過程

    springboot配置log日志按天按類緩存實(shí)現(xiàn)過程

    文章介紹了如何配置Spring Boot項(xiàng)目中的`application.yml`文件,并在同級目錄下創(chuàng)建`logback-spring.xml`文件以自定義日志設(shè)置,最后,展示了運(yùn)行結(jié)果的圖示
    2026-01-01
  • SpringBoot http請求注解@RestController原理解析

    SpringBoot http請求注解@RestController原理解析

    這篇文章主要介紹了SpringBoot http請求注解@RestController原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論

汶上县| 鹤山市| 湘潭县| 宁强县| 南汇区| 桦川县| 华坪县| 甘孜县| 丰顺县| 洱源县| 张家川| 江永县| 平度市| 竹北市| 清水县| 吴江市| 济宁市| 尤溪县| 荃湾区| 沂水县| 忻城县| 赣榆县| 清徐县| SHOW| 溧阳市| 平和县| 武清区| 莲花县| 龙江县| 永川市| 滨州市| 冷水江市| 土默特右旗| 罗田县| 班戈县| 道孚县| 林西县| 竹溪县| 纳雍县| 正镶白旗| 临武县|