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

SpringBoot中選擇性加載Bean的幾種方式小結(jié)

 更新時(shí)間:2025年01月24日 10:00:56   作者:何中應(yīng)  
自動(dòng)配置是springboot技術(shù)非常好用的核心因素,前面學(xué)習(xí)了這么多種技術(shù)的整合,每一個(gè)都離不開自動(dòng)配置,不過(guò)在學(xué)習(xí)自動(dòng)配置的時(shí)候,需要你對(duì)spring容器如何進(jìn)行bean管理的過(guò)程非常熟悉才行,本文給大家介紹了SpringBoot中選擇性加載Bean的幾種方式,需要的朋友可以參考下

@ConditionalOnProperty

@ConditionalOnProperty,根據(jù)配置文件中指定的值決定是否加載,如下:

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;

/**
 * 根據(jù)配置文件中指定的值決定是否加載;
 */
@Component
@ConditionalOnProperty(name = "dev.name", havingValue = "hezy", matchIfMissing = true)
public class OnProperty {
}

參數(shù),其中:

  • name/value:配置項(xiàng)名稱;
  • havingValue:配置值;
  • matchIfMissing:表示不存在該配置項(xiàng)時(shí),是否加載Bean,默認(rèn)false,需要注意,這里說(shuō)的是沒(méi)有該配置項(xiàng),而不是配置值對(duì)應(yīng)不上;

如上面的代碼,表示配置文件中存在dev.name配置項(xiàng),且值為hezy時(shí)加載Bean,沒(méi)有配置項(xiàng)的話加載;

application.yml,如下:

server:
  port: 7084

dev:
  name: "dev"

啟動(dòng)項(xiàng)目,不加載該Bean,因?yàn)榕渲庙?xiàng)的值對(duì)不上

在這里插入圖片描述

@ConditionalOnJava

@ConditionalOnJava,根據(jù)Java版本決定是否加載,如下:

import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
import org.springframework.boot.system.JavaVersion;
import org.springframework.stereotype.Component;

/**
 * 根據(jù)Java版本決定是否加載
 */
@Component
@ConditionalOnJava(JavaVersion.SEVENTEEN)
public class OnJava {
}

注解的參數(shù)只有一個(gè),即Java版本,如我IDEA中加載的JDK11,填JavaVersion.SEVENTEEN,Java17,不會(huì)加載該Bean。但是如果設(shè)置的是JavaVersion.EIGHT,則會(huì)加載Bean,也就說(shuō)這里向下兼容了。

(Java11)

在這里插入圖片描述

(代碼設(shè)置的Java8)

import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
import org.springframework.boot.system.JavaVersion;
import org.springframework.stereotype.Component;

/**
 * 根據(jù)Java版本決定是否加載
 */
@Component
@ConditionalOnJava(JavaVersion.EIGHT)
public class OnJava {
}

啟動(dòng)項(xiàng)目,加載了Bean

在這里插入圖片描述

@ConditionalOnBean

@ConditionalOnBean,根據(jù)Spring容器中是否存在指定的Bean決定是否加載。有以下三種配置:

  • 指定類:@ConditionalOnBean(OnJava.class)
  • 指定Bean:@ConditionalOnBean(name = “onProperty”)
  • 指定多個(gè)類:@ConditionalOnBean({OnProperty.class, OnJava.class})

如下,表示只有容器中存在OnJava.class的Bean時(shí)才加載

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Component;

/**
 * 根據(jù)Spring容器中是否存在指定的Bean決定是否加載
 */
@Component
@ConditionalOnBean(OnJava.class)
public class OnBean {
}

因?yàn)槿萜髦杏蠴nJava,所以O(shè)nBean也加載了;

在這里插入圖片描述

@ConditionalOnMissingBean

@ConditionalOnMissingBean,根據(jù)Spring容器中是否不存在指定的Bean決定是否加載,與@ConditionalOnBean相反。也有以下三種配置方式:

  • 指定類:@ConditionalOnMissingBean(OnJava.class)
  • 指定Bean:@ConditionalOnMissingBean(name = “onProperty”)
  • 指定多個(gè)類:@ConditionalOnMissingBean({OnProperty.class, OnJava.class})

如下,表示容器中OnJava、OnClass都不存在時(shí)才加載。注意如果指定多個(gè)類,它們的條件是 And 的關(guān)系,@ConditionalOnBean 也一樣。

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Component;

/**
 * 根據(jù)Spring容器中是否不存在指定的Bean決定是否加載
 */
@Component
@ConditionalOnMissingBean({OnJava.class, OnProperty.class})
public class OnMissingBean {
}

如下,容器中沒(méi)有OnProperty,但是OnJava有,所以O(shè)nMissingBean也不加載,需要都不存在才加載

在這里插入圖片描述

@ConditionalOnClass

@ConditionalOnClass,根據(jù)類是否存在指定的類來(lái)決定是否加載,有以下三種配置:

  • 指定類:@ConditionalOnClass(OnJava.class);
  • 指定類的全限定類名:@ConditionalOnClass(name = “com.hezy.bean.OnJava”)
  • 指定多個(gè)類:@ConditionalOnClass({OnJava.class, OnClass.class})

需要和上面的指定OnBean區(qū)分開,指定Bean是需要類加載到容器里,即類上要打@Component、@Service、@Controller等這樣的注解,而OnClass就不用,只要你存在這樣的類文件即可。

如下,表示存在OnJava類加載

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.stereotype.Component;

/**
 * 根據(jù)類是否存在指定的類來(lái)決定是否加載
 */
@Component
@ConditionalOnClass(name = "com.hezy.bean.OnJava")
public class OnClass {
}

把OnJava類上的@Component注解去掉,啟動(dòng)項(xiàng)目

import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
import org.springframework.boot.system.JavaVersion;

/**
 * 根據(jù)Java版本決定是否加載
 */
@ConditionalOnJava(JavaVersion.EIGHT)
public class OnJava {
}

可以看到,容器里沒(méi)有OnJava的Bean,但是OnClass加載了

在這里插入圖片描述

@ConditionalOnMissingClass

@ConditionalOnMissingClass,根據(jù)類路徑中是否不存在指定的類來(lái)決定是否加載,與@ConditionalOnClass相反,配置方式有兩種:

  • 指定類的全限定類名:@ConditionalOnMissingClass(“com.hezy.bean.OnJava”)
  • 指定多個(gè)類:@ConditionalOnMissingClass({“com.hezy.bean.OnJava1”, “com.hezy.bean.OnJava2”})

為什么少了指定類,因?yàn)檫@里配置的是不存在的類,不存在的類,怎么寫 類名.class (笑)

如下,表示不存在對(duì)應(yīng)路徑的OnJava1、OnJava2時(shí)才加載,配置多個(gè)類,是And的關(guān)系,即需要都不存在才加載;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.stereotype.Component;

/**
 * 根據(jù)類路徑中是否不存在指定的類來(lái)決定是否加載
 */
@Component
@ConditionalOnMissingClass({"com.hezy.bean.OnJava1", "com.hezy.bean.OnJava2"})
public class OnMissingClass {
}

因?yàn)榕渲玫念惗疾淮嬖?,所以加載了OnMissingClass

在這里插入圖片描述

總結(jié)

本文介紹了Spring Boot中六種選擇性加載Bean的方式,按照配置文件加載Bean的方式用的最多。除此六種,Spring還支持其他方式,可在Spring Boot框架中用 @Conditional 為前綴搜索,如下:

在這里插入圖片描述

以上就是SpringBoot中選擇性加載Bean的幾種方式小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot選擇性加載Bean的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(29)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(29)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • @ConfigurationProperties用法及說(shuō)明

    @ConfigurationProperties用法及說(shuō)明

    @ConfigurationProperties注解用于綁定配置文件中的屬性至實(shí)體類,只需在實(shí)體類上添加此注解,屬性名需與配置文件中的名稱相同(非駝峰形式),這樣即可實(shí)現(xiàn)配置文件與實(shí)體類屬性間的綁定
    2026-05-05
  • Java基礎(chǔ)學(xué)習(xí)之實(shí)參和形參

    Java基礎(chǔ)學(xué)習(xí)之實(shí)參和形參

    這篇文章主要介紹了Java基礎(chǔ)學(xué)習(xí)之實(shí)參形參,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-05-05
  • springboot對(duì)接minio的webhook完整步驟記錄

    springboot對(duì)接minio的webhook完整步驟記錄

    Minio是一款開源的對(duì)象存儲(chǔ)服務(wù),它致力于為開發(fā)者提供簡(jiǎn)單、高性能、高可用的云存儲(chǔ)解決方案,下面這篇文章主要給大家介紹了關(guān)于springboot對(duì)接minio的webhook的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Eclipse2020安裝了最新版本的JDK卻無(wú)法打開的問(wèn)題

    Eclipse2020安裝了最新版本的JDK卻無(wú)法打開的問(wèn)題

    這篇文章主要介紹了Eclipse2020安裝了最新版本的JDK卻無(wú)法打開,提示版本太老的完美解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Spring Cloud Feign實(shí)例講解學(xué)習(xí)

    Spring Cloud Feign實(shí)例講解學(xué)習(xí)

    這篇文章主要介紹了Spring Cloud Feign實(shí)例講解學(xué)習(xí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Rxjava功能操作符的使用方法詳解

    Rxjava功能操作符的使用方法詳解

    這篇文章主要介紹了Rxjava功能操作符的使用方法詳解,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • Java實(shí)現(xiàn)的打地鼠小游戲完整示例【附源碼下載】

    Java實(shí)現(xiàn)的打地鼠小游戲完整示例【附源碼下載】

    這篇文章主要介紹了Java實(shí)現(xiàn)的打地鼠小游戲,結(jié)合完整實(shí)例形式分析了Java多線程操作及鍵盤按鍵響應(yīng)實(shí)現(xiàn)的打地鼠游戲功能相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • spring boot使用自定義注解做AOP的案例代碼

    spring boot使用自定義注解做AOP的案例代碼

    這篇文章主要介紹了spring boot使用自定義注解做AOP的案例代碼,代碼簡(jiǎn)單易懂,通過(guò)創(chuàng)建一個(gè)自定注解,接收一個(gè)傳值type,感興趣的朋友一起看看吧
    2024-06-06
  • Zookeeper全局唯一ID生成方案解析

    Zookeeper全局唯一ID生成方案解析

    這篇文章主要介紹了Zookeeper全局唯一ID生成方案解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論

宜兴市| 霍州市| 维西| 仲巴县| 囊谦县| 九龙坡区| 孟津县| 若羌县| 镇江市| 抚远县| 潢川县| 青田县| 玛多县| 隆回县| 鱼台县| 洱源县| 邹城市| 施秉县| 营山县| 竹溪县| 外汇| 公安县| 太谷县| 克拉玛依市| 德化县| 新巴尔虎左旗| 沧源| 京山县| 合川市| 台北县| 南安市| 安宁市| 获嘉县| 思茅市| 遂宁市| 临城县| 潮州市| 临泽县| 定襄县| 和田县| 潮安县|