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

Spring Boot中@Conditional注解介紹

 更新時(shí)間:2022年09月14日 10:24:42   作者:Dream_it_possible!  
@Conditional表示僅當(dāng)所有指定條件都匹配時(shí),組件才有資格注冊(cè)。該@Conditional注釋可以在以下任一方式使用:作為任何@Bean方法的方法級(jí)注釋、作為任何類的直接或間接注釋的類型級(jí)別注釋@Component,包括@Configuration類、作為元注釋,目的是組成自定義構(gòu)造型注釋

1. @Conditional 注解

@Conditional注解是Spring-context模塊提供了一個(gè)注解,該注解的作用是可以根據(jù)一定的條件來(lái)使@Configuration注解標(biāo)記的配置類是否生效,代碼如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.context.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
    Class<? extends Condition>[] value();
}

value值為實(shí)現(xiàn)Condition 接口的一個(gè)Class,Spring框架根據(jù)實(shí)現(xiàn)Conditon接口的matches方法返回true或者false來(lái)做以下操作,如果matches方法返回true,那么該配置類會(huì)被Spring掃描到容器里, 如果為false,那么Spring框架會(huì)自動(dòng)跳過(guò)該配置類不進(jìn)行掃描裝配,使用方法:

實(shí)現(xiàn)Condition接口, 例如在配置文件里配置了dataSource.none=true, 那么表示不需要使用數(shù)據(jù)源,那么Spring在掃描的時(shí)候會(huì)自動(dòng)跳過(guò)該配置類。

package com.bing.sh.datasource;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
 * 如果為返回false,那么Spring會(huì)忽略配置類
 */
public class DataSourceCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        // 此處使用 conditionContext獲取Environment即可。
        String configureDataSource = conditionContext.getEnvironment().getProperty("dataSource.none", "false");
        return "false".equals(configureDataSource);
    }
}

定義配置類,與@Conditional注解一起使用:

@Configuration
@Conditional(value = DataSourceCondition.class)
public class CustomDataSourceConfig {
}

除了Conditional注解,Spring boot 框架提供了其他conditional系列注解。

2. Springboot擴(kuò)展

SpringBoot的spring-boot-autoconfigure模塊也提供了Conditional系列的相關(guān)注解,這些注解能幫助開發(fā)者根據(jù)一定的條件去裝載需要的Bean。

1) @ConditionalOnClass和@ConditionalOnMissingClass注解

當(dāng)Spring加載的Bean被@ConditionOnClass注解標(biāo)記時(shí),類加載器會(huì)先去先找到指定的Class, 如果沒(méi)有找到目標(biāo)Class,那么被ConditionOnClass注解標(biāo)記的類不會(huì)被Spring裝載,相反ConditionalOnMissingBean是指如果沒(méi)有找到目標(biāo)Class, 那么就裝載該類。

2) @ConditionalOnBean 和@ConditionalOnMissingBean注解

當(dāng)Spring加載的Bean被@ConditionalOnBean注解標(biāo)記時(shí),接下來(lái)會(huì)先找到指定的Bean,如果沒(méi)有找到目標(biāo)Bean,那么被@ConditionalOnBean標(biāo)記的類不會(huì)被Spring裝載,相反ConditionalOnMissingBean是指如果沒(méi)有Class, 那么就裝載該Bean。

3) @ConditionalOnProperty注解

該注解的作用是解析application.yml/application.properties 里的配置生成條件來(lái)生效,也是與@Configuration注解一起使用。

屬性功能其他
prefix讀取配置里的前綴值為prefix的屬性, 如果沒(méi)有返回false 
name讀取屬性配置里的Key值,如果配置了prefix,那么需要先拼接prefix然后匹配havingValue值 
havingValue匹配屬性里的值 
matchIfMissing當(dāng)未找到對(duì)應(yīng)的配置時(shí)是否匹配,默認(rèn)為false, 如果為true,沒(méi)有找到配置,那么也匹配。 

使用場(chǎng)景,例如在指定數(shù)據(jù)源時(shí),指定datasource的type。例如包含如下配置使用Hikari數(shù)據(jù)源。

spring.datasource.type=com.zaxxer.hikari.HikariDataSource

在使用時(shí),一般設(shè)置matchIfMissing=false, 這樣條件沒(méi)有匹配上的話會(huì)Spring在掃描bean時(shí)會(huì)自動(dòng)跳過(guò)該配置類。

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

相關(guān)文章

  • springboot打jar包之后下載文件的路徑問(wèn)題

    springboot打jar包之后下載文件的路徑問(wèn)題

    這篇文章主要介紹了springboot打jar包之后下載文件的路徑問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中怎樣處理空指針異常

    Java中怎樣處理空指針異常

    程序中的變量是?null,就意味著它沒(méi)有引用指向或者說(shuō)沒(méi)有指針。這時(shí),我們對(duì)這個(gè)變量進(jìn)行任何操作,都必然會(huì)引發(fā)空指針異常,本文主要介紹了Java中怎樣處理空指針異常,感興趣的可以了解一下
    2022-05-05
  • 詳解application.properties和application.yml文件的區(qū)別

    詳解application.properties和application.yml文件的區(qū)別

    這篇文章主要介紹了詳解application.properties和application.yml文件的區(qū)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Java實(shí)現(xiàn)注冊(cè)郵箱激活賬戶實(shí)例代碼

    Java實(shí)現(xiàn)注冊(cè)郵箱激活賬戶實(shí)例代碼

    本篇文章主要介紹了Java實(shí)現(xiàn)郵箱激活賬戶實(shí)例代碼,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,有需要的小伙伴可以參考下。
    2017-07-07
  • SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能

    SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能

    這篇文章主要介紹了SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • cmd使用javac和java及注意事項(xiàng)

    cmd使用javac和java及注意事項(xiàng)

    這篇文章主要介紹了cmd使用javac和java及注意事項(xiàng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-12-12
  • java 基礎(chǔ)知識(shí)之網(wǎng)絡(luò)通信(TCP通信、UDP通信、多播以及NIO)總結(jié)

    java 基礎(chǔ)知識(shí)之網(wǎng)絡(luò)通信(TCP通信、UDP通信、多播以及NIO)總結(jié)

    這篇文章主要介紹了java 基礎(chǔ)知識(shí)之網(wǎng)絡(luò)通信總結(jié)的相關(guān)資料,包括TCP通信、UDP通信、多播以及NIO,需要的朋友可以參考下
    2017-03-03
  • 一文搞懂?MyBatis的事務(wù)管理機(jī)制

    一文搞懂?MyBatis的事務(wù)管理機(jī)制

    MyBatis是一款優(yōu)秀的持久層框架,相信很多Java后端開發(fā)人員對(duì)它都不會(huì)陌生。本文將從事務(wù)概述、MyBatis實(shí)現(xiàn)事務(wù)的方式、事務(wù)實(shí)現(xiàn)源碼分析方面詳細(xì)解析MyBatis的事務(wù)管理機(jī)制,需要的朋友可以參考下
    2023-05-05
  • Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式

    Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式

    這篇文章主要介紹了Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java數(shù)組的三種擴(kuò)容方式以及程序?qū)崿F(xiàn)詳解

    java數(shù)組的三種擴(kuò)容方式以及程序?qū)崿F(xiàn)詳解

    這篇文章主要介紹了java數(shù)組的三種擴(kuò)容方式以及程序?qū)崿F(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

屏东市| 迁西县| 新余市| 沙洋县| 琼中| 黄陵县| 凯里市| 宁海县| 海兴县| 日土县| 二连浩特市| 北辰区| 益阳市| 张家界市| 大足县| 通州市| 仁布县| 鲜城| 大连市| 无锡市| 苏尼特左旗| 望江县| 长阳| 桓仁| 甘南县| 天等县| 诏安县| 怀来县| 虹口区| 怀化市| 仁寿县| 托克托县| 荔浦县| 叶城县| 马关县| 称多县| 苗栗市| 汨罗市| 巴塘县| 万盛区| 城口县|