SpringBoot——原理(自动配置+原理分析@Conditional)

news/2024/11/24 4:29:32/

在上一篇有说到,进行源码跟踪时可以看见一个以@Conditional开头的注解,这些都是条件装配的注解。

加在方法上时只对该方法生效,加在类上时是对整个配置类都有效。

这里只说三个常用的@Conditional的子注解

 案例演示

在启动类上加上一个@EnableHeatherConfi注解,这个注解底层是第三方依赖包准备的一个配置类

 

@ConditionalOnClass

如图加上这个注解之后再加上一个全类名指定查找(com.itheima.controller.DeptController)这个类,springboot会自动判断是否存在一个这样的类,只有存在了才会将headerParser这个Bean对象注册到IOC容器当中.

然后在单元测试类当中尝试获取这个类的Bean对象,如图所示成功获取到这个Bean对象。 

然后再改一改name属性,改成不存在的一个全类名之后再尝试获取,结果如下所示

报错说不存在HeaderParser这个Bean对象

 @ConditionalOnMissingBean

如果是什么value都没有,这个注解判断的就是自身这个Bean是否存在于环境,如果不存在就加入IOC容器中。

这里也可以根据指定的Bean类型或者名称来进行判断。

 单元测试尝试获取这个Bean,成功获取,另外的两种这里不再演示

 @ConditionalOnProperty

如下所示会自动判断在项目的配置文件中是否存在一个属性名为“name”,属性值为“itheima”的配置项

  在配置文件中如下,不存在需要的东西。

直接在测试单元尝试获取Bean对象输出如下,无法获取这个Bean对象。 在配置文件加上需要的属性值和属性之后再次获取就可以正常获取到的 

 使用场景:在使用第三方依赖的时候有时会需要声明很多配置项才能使用,比如mybatis就需要用户名密码和url等等。

总结

在前面提到的google提供的处理json的一个类Gson如下所示

在其配置类上面有一个@ConditionalOnClass注解判断当前文件是否存在Gson.class这个字节码文件,有才会把当前配置类加载到IOC容器。

在Gson上还有一个@ConditionalOnMissingBean这个注解,表示环境下有当前类型的Bean对象时才会使用用户自定义的这个Bean,没有的话会把当前的Bean对象注册到IOC容器当中。

自动配置原理梳理

 


http://www.ppmy.cn/news/97569.html

相关文章

YOLOv5独家原创改进,ShuffleNetV2网络结构,改进ShuffleNetV2准确率低问题

目录 一、介绍1、轻量化目标检测的瓶颈2、YOLOv5和ShuffleNetV2的概述 二、ShuffleNetV2的架构1、ShuffleNetV2的基本单元——ShuffleNet Unit2、ShuffleNetV2的网络结构 三、ShuffleNetV2的特点1、高效的通道重排操作2、逐通道矩阵乘法3、轻量级和高精度的平衡 四、YOLOv51、Y…

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl() 函数代码分析

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析 一、XBL Loader 汇编源码分析1.1 解析 boot\QcomPkg\XBLLoader\XBLLoader.inf1.2 boot\QcomPkg\XBLDevPrg\ModuleEntryPoint.S:跳转 sbl1_entry 函数1.3 XBLLoaderLib\sbl1_Aarch64.s…

Android 12.0framework添加自定义开机广播

1.概述 在12.0的进行系统定制化开发中,在内置一些app需要收到开机广播以后然后做一些相关的操作的功能的时候,发现开机广播要好久能收到,要么就收不到开机广播,所以这就需要了解开机广播在哪里发送,然后自定义开机广播来接收自定义开机广播然后开发一些功能 2.framework…

美债死期推迟

* * * 原创:刘教链 * * * 号外:今天在小号“刘教链Pro”发表了一篇《链上投票是社会契约的一种存证》,探讨未来组织和DAO的治理问题,欢迎关注“刘教链Pro”并阅读。 * * * 隔夜比特币略有回升,从26.5k下方来到了26.5k…

Qt基础之三十六:异常处理

本文将介绍如何在Qt中使用try...catch和调试dump文件来处理异常。 Qt版本5.12.6 一.使用try...catch 一段简单的捕获异常的代码,新建一个控制台工程,pro文件不用修改 #include <QCoreApplication> #include <QDebug>int main(int argc, char *argv[]) {QCoreA…

论文阅读_增强语言模型综述

论文信息 name_en: Augmented Language Models: a Survey name_ch: 增强语言模型综述 paper_addr: http://arxiv.org/abs/2302.07842 date_read: 2023-05-20 date_publish: 2023-02-15 tags: [‘深度学习’,‘自然语言处理’,‘大模型’] author: Grgoire Mialon&#xff0c;M…

【springcloud微微服务】分布式事务框架Seata使用详解

目录 一、前言 二、事务简介 2.1 原子性 2.2 一致性 2.3 隔离性 2.4 持久性

【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

文章目录 一、需求环境/版本 二、须知2.1、什么是RPC&#xff1f;2.2、什么是Dubbo&#xff1f;2.3、什么是Nacos&#xff1f; 三、普通的SpringBoot项目集成微服务组件方案&#xff08;笔者给出两种&#xff09;方案一&#xff08;推荐&#xff09;1、导入maven依赖&#xff0…