亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot中的@ConditionalOnBean注解詳細(xì)解讀

 更新時(shí)間:2023年11月14日 08:42:22   作者:你就像甜甜的益達(dá)  
這篇文章主要介紹了Springboot中的@ConditionalOnBean注解詳細(xì)解讀,@ConditionalOnMissingBean注解兩個(gè)類,一個(gè)Computer類,一個(gè)配置類,想要完成;如果容器中沒有Computer類,就注入備用電腦Computer類,如果有Computer就不注入,需要的朋友可以參考下

@ConditionalOnMissingBean測(cè)試

首先學(xué)習(xí): @ConditionalOnMissingBean注解

兩個(gè)類,一個(gè)Computer類,一個(gè)配置類,想要完成;如果容器中沒有Computer類,就注入備用電腦Computer類,如果有Computer就不注入;

computer類:

@Data
@AllArgsConstructor
public class Computer {

    public String name;

}

配置類:

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {

//    @Bean(name = "notebookPC")
    public Computer computer1() {
        return new Computer("筆記本電腦");
    }

//    @ConditionalOnBean(Computer.class)
    @ConditionalOnMissingBean(Computer.class)
    @Bean("notebookPC")
    public Computer computer2() {
        return new Computer("備用電腦");
    }
}

測(cè)試啟動(dòng)類:

在這里插入圖片描述

public class ConditionOnBeanTest extends BaseTest implements ApplicationContextAware {

    @Test
    public void test1() {
        Map<String, Computer> beansOfType = ApplicationContext.getBeansOfType(Computer.class);

        System.out.println(JSON.toJSONString(beansOfType));

    }

    public ApplicationContext ApplicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.ApplicationContext = applicationContext;
    }
}

執(zhí)行測(cè)試類:

在這里插入圖片描述

容器中加載的是筆記本,將筆記本去掉走一波:

在這里插入圖片描述

容器中注入的是備用電腦,很明了…

在這里插入圖片描述

@ConditionalOnBean

再來講@ConditionalOnBean注解就會(huì)很簡(jiǎn)單,跟@ConditionalOnMissingBean相反。 @ConditionalOnBean注解是,如果有容器中有Computer類,就注入備用電腦Computer類,如果沒有Computer就不注入;可以自己換個(gè)注解試一下就知道了,

在這里插入圖片描述

源碼分析

一起看下@ConditionalOnMissingBean的聲明:

在這里插入圖片描述

@Condition注解使用的是OnBeanCondition類,我們就看下這個(gè)類.這個(gè)類繼承FilteringSpringBootCondition,就看繼承的,FilteringSpringBootCondition又繼承SpringBootCondition,點(diǎn)到SpringBootCondition,看到了我們熟悉的方法,matches方法.

在這里插入圖片描述

在這里插入圖片描述

我們一起看看matche方法

在這里插入圖片描述

看最重要的方法的實(shí)現(xiàn);

在這里插入圖片描述

主要就在這個(gè)方法里面:

在這里插入圖片描述

返回的對(duì)象:

在這里插入圖片描述

getMatchingBeans方法比較復(fù)雜,也比較簡(jiǎn)單,就是根據(jù)當(dāng)前上下文容器,查找是否存在對(duì)應(yīng)的類,SearchStrategy 這個(gè)枚舉定義了搜索的范圍,All就是搜索整個(gè)上下文,父子容器等等,ANCESTORS搜索所有祖先,除開當(dāng)前上下文,CURRENT,就是當(dāng)前上下文

在這里插入圖片描述

然后就對(duì)著上下文一頓操作,返回結(jié)果.

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

相關(guān)文章

  • Spring?Bean后處理器詳細(xì)介紹

    Spring?Bean后處理器詳細(xì)介紹

    Bean后置處理器允許在調(diào)用初始化方法前后對(duì)Bean進(jìn)行額外的處理??梢栽?Spring容器通過插入一個(gè)或多個(gè)BeanPostProcessor的實(shí)現(xiàn)來完成實(shí)例化,配置和初始化一個(gè)?bean?之后實(shí)現(xiàn)一些自定義邏輯回調(diào)方法
    2023-01-01
  • java.util.Collections類—emptyList()方法的使用

    java.util.Collections類—emptyList()方法的使用

    這篇文章主要介紹了java.util.Collections類—emptyList()方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java設(shè)計(jì)模式之中介者模式

    Java設(shè)計(jì)模式之中介者模式

    這篇文章介紹了Java設(shè)計(jì)模式之中介者模式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Spring的FactoryBean<Object>接口示例代碼

    Spring的FactoryBean<Object>接口示例代碼

    FactoryBean是Spring框架中的一個(gè)接口,用于創(chuàng)建和管理Bean對(duì)象,它的作用是將Bean的創(chuàng)建過程交給FactoryBean實(shí)現(xiàn)類來完成,而不是直接由Spring容器來創(chuàng)建,本文給大家介紹Spring的FactoryBean<Object>接口,感興趣的朋友一起看看吧
    2023-11-11
  • Spring Boot2讀取配置常用方法代碼實(shí)例

    Spring Boot2讀取配置常用方法代碼實(shí)例

    這篇文章主要介紹了Spring Boot2讀取配置常用方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解SpringBoot如何實(shí)現(xiàn)緩存預(yù)熱

    詳解SpringBoot如何實(shí)現(xiàn)緩存預(yù)熱

    緩存預(yù)熱是指在 Spring Boot 項(xiàng)目啟動(dòng)時(shí),預(yù)先將數(shù)據(jù)加載到緩存系統(tǒng)(如 Redis)中的一種機(jī)制,下面我們就來看看SpringBoot是如何實(shí)現(xiàn)緩存預(yù)熱的吧
    2024-01-01
  • RocketMQ中的消息發(fā)送與消費(fèi)詳解

    RocketMQ中的消息發(fā)送與消費(fèi)詳解

    這篇文章主要介紹了RocketMQ中的消息發(fā)送與消費(fèi)詳解,RocketMQ是一款高性能、高可靠性的分布式消息中間件,消費(fèi)者是RocketMQ中的重要組成部分,消費(fèi)者負(fù)責(zé)從消息隊(duì)列中獲取消息并進(jìn)行處理,需要的朋友可以參考下
    2023-10-10
  • java HashMap的keyset實(shí)例

    java HashMap的keyset實(shí)例

    簡(jiǎn)單地說,在keyset方法返回的set上做修改會(huì)改變?cè)瓉韍ashmap,這也許不是你想要的,于是形成一個(gè)隱藏的bug
    2013-04-04
  • Java中的main方法調(diào)用非靜態(tài)方法處理

    Java中的main方法調(diào)用非靜態(tài)方法處理

    這篇文章主要介紹了Java中的main方法調(diào)用非靜態(tài)方法處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Aspectj與Spring AOP的對(duì)比分析

    Aspectj與Spring AOP的對(duì)比分析

    這篇文章主要介紹了Aspectj與Spring AOP的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論