欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot框架中的@Conditional注解示例詳解

 更新時間:2022年09月14日 10:29:03   作者:Dream_it_possible!  
這篇文章主要介紹了Spring Boot框架中的@Conditional系列注解,@ConditionalOnProperty注解的作用是解析application.yml/application.properties 里的配置生成條件來生效,也是與@Configuration注解一起使用,本文通過示例代碼給大家介紹的非常詳細,需要的朋友一起看看吧

1. @Conditional 注解

@Conditional注解是Spring-context模塊提供了一個注解,該注解的作用是可以根據(jù)一定的條件來使@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值為實現(xiàn)Condition 接口的一個Class,Spring框架根據(jù)實現(xiàn)Conditon接口的matches方法返回true或者false來做以下操作,如果matches方法返回true,那么該配置類會被Spring掃描到容器里, 如果為false,那么Spring框架會自動跳過該配置類不進行掃描裝配,使用方法:

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

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會忽略配置類
 */
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. Spring boot 擴展

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

1) @ConditionalOnClass和@ConditionalOnMissingClass注解

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

2) @ConditionalOnBean 和@ConditionalOnMissingBean注解

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

3) @ConditionalOnProperty注解

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

屬性

功能

其他

prefix

讀取配置里的前綴值為prefix的屬性, 如果沒有返回false

 

name

讀取屬性配置里的Key值,如果配置了prefix,那么需要先拼接prefix然后匹配havingValue值

 

havingValue

匹配屬性里的值

 

matchIfMissing

當(dāng)未找到對應(yīng)的配置時是否匹配,默認為false, 如果為true,沒有找到配置,那么也匹配。

 

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

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

在使用時,一般設(shè)置matchIfMissing=false, 這樣條件沒有匹配上的話會Spring在掃描bean時會自動跳過該配置類。

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

相關(guān)文章

  • spring boot 打包jar jar沒有主目錄清單問題的完美解決方法

    spring boot 打包jar jar沒有主目錄清單問題的完美解決方法

    這篇文章主要介紹了spring boot 打包jar jar沒有主目錄清單問題的解決方法,本文是小編第一次寫,希望對大家有所幫助
    2018-07-07
  • 關(guān)于Mybatis與JPA的優(yōu)缺點說明

    關(guān)于Mybatis與JPA的優(yōu)缺點說明

    這篇文章主要介紹了關(guān)于Mybatis與JPA的優(yōu)缺點說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot Jpa 自定義查詢實現(xiàn)代碼詳解

    SpringBoot Jpa 自定義查詢實現(xiàn)代碼詳解

    這篇文章主要介紹了SpringBoot Jpa 自定義查詢實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java繼承構(gòu)造器使用過程解析

    Java繼承構(gòu)造器使用過程解析

    這篇文章主要介紹了Java繼承構(gòu)造器使用過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • java網(wǎng)絡(luò)編程之群聊功能

    java網(wǎng)絡(luò)編程之群聊功能

    這篇文章主要為大家詳細介紹了java網(wǎng)絡(luò)編程之群聊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java自定義一個變長數(shù)組的思路與代碼

    Java自定義一個變長數(shù)組的思路與代碼

    有時我們希望將把數(shù)據(jù)保存在單個連續(xù)的數(shù)組中,以便快速、便捷地訪問數(shù)據(jù),但這需要調(diào)整數(shù)組大小或者對其擴展,下面這篇文章主要給大家介紹了關(guān)于Java自定義一個變長數(shù)組的思路與代碼,需要的朋友可以參考下
    2022-12-12
  • Java 關(guān)于時間復(fù)雜度和空間復(fù)雜度的深度刨析

    Java 關(guān)于時間復(fù)雜度和空間復(fù)雜度的深度刨析

    算法復(fù)雜度分為時間復(fù)雜度和空間復(fù)雜度。其作用: 時間復(fù)雜度是度量算法執(zhí)行的時間長短;而空間復(fù)雜度是度量算法所需存儲空間的大小
    2021-11-11
  • 使用redis的increment()方法實現(xiàn)計數(shù)器功能案例

    使用redis的increment()方法實現(xiàn)計數(shù)器功能案例

    這篇文章主要介紹了使用redis的increment()方法實現(xiàn)計數(shù)器功能案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 詳解Java如何優(yōu)雅地書寫if-else

    詳解Java如何優(yōu)雅地書寫if-else

    在日常開發(fā)中我們常常遇到有多個if?else的情況,之間書寫顯得代碼冗余難看,對于追求更高質(zhì)量代碼的同學(xué),就會思考如何優(yōu)雅地處理這種代碼。本文我們就來探討下幾種優(yōu)化if?else的方法
    2022-08-08
  • 詳解Spring中Lookup注解的使用

    詳解Spring中Lookup注解的使用

    我們知道在spring容器中單獨的一個抽象類是不能成為一個bean的,那么有沒有辦法呢?這個時候我們可以使用Lookup注解,下面跟隨小編看下Spring中Lookup注解的使用
    2021-10-10

最新評論