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

news2024/11/25 12:55:39

在上一篇有说到,进行源码跟踪时可以看见一个以@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.coloradmin.cn/o/578863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二章:ShardingSphere简介

什么是ShardingSphere 何为ShardingSphere呢?其实我们总结如下三点就能很好的理解: 1、一整套开源的分布式数据库中间件解决方案 2、有三个产品组成:Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar(规划中) 3、他的定位是关系型数据库的中间件,在分布式环境下合理的…

【20】SCI易中期刊推荐——计算机信息系统工程电子与电气(中科院3区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

(转载)matlab遗传算法工具箱

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1理论基础 1.1遗传算法概述 遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代…

Qiskit系列(1)---Qiskit安装

1.qiskit与anaconda简介 Qiskit并不是一门独立的语言&#xff0c;它是基于Python的一个框架&#xff0c;就好比Pytorch, Tensorflow。而Qiskit这个框架需要配套一些其他的package&#xff08;各种大小DLC&#xff09;一起运行&#xff0c;这些运行Qiskit所必须的package就构成了…

vue前端分页功能怎么实现

Vue前端分页功能可以通过以下几个步骤实现&#xff1a; 1. 安装分页组件库&#xff08;如vue-pagination-2&#xff09;&#xff1a; bash npm install vue-pagination-2 2. 在Vue项目中引入并注册分页组件&#xff1a; javascript import Vue from vue; import Pagination fr…

【商品详情 +关键词搜索】API 接口系列

首先&#xff0c;大家要到官方主页去申请一个 appkey&#xff0c;这个是做什么用的呢&#xff1f;App Key 是应用的唯一标识&#xff0c;TOP 通过 App Key 来鉴别应用的身份。AppSecret 是 TOP 给应用分配的密钥&#xff0c;开发者需要妥善保存这个密钥&#xff0c;这个密钥用来…

增强语言模型导读

以ChatGPT为主的大语言模型出现已有半年时间&#xff0c;研究逐渐从针对模型本身的进化和功能&#xff0c;延展到如何更为有效地利用大模型&#xff0c;将它与其它工具结合&#xff0c;落地&#xff0c;以解决实际领域中的问题。 这里的增强主要指让大语言模型&#xff08;LM&…

【21】SCI易中期刊推荐——计算机科学人工智能领域(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

Unity 动画系统基本概念

一、动画的基本概念 1、帧 在古代&#xff0c;一幅字画叫一帧&#xff0c;而在计算机中&#xff0c;每次渲染完毕一幅画面并显示出来&#xff0c;这一幅画就是一帧。 连续切换的帧就形成了动态的画面。每秒刷新帧的次数称为频率&#xff0c;单位是FPS&#xff08;Frames Per…

JavaEE Tomcat Servelet第一个helloworld程序

Tomcat & Servelet第一个程序helloworld&#xff01; 文章目录 JavaEE & Tomcat & 第一个Servelet程序1. HTTP服务器 - Tomcat1.1 Tomcat的目录结构&#xff1a;1.2 启动Tomcat1.3 Tomcat的优点 2. Servelet框架2.1 创建Maven项目2.2 引入依赖2.3 创建目录2.4 写代…

Mac电脑读写移动硬盘软件Tuxera NTFS2023中文版

日常工作中&#xff0c;我们经常会使用移动硬盘拷贝文件&#xff0c;因为移动硬盘传输文件方便、传输速度快。但我们在mac电脑上使用移动硬盘却发现硬盘无法正常读写。本文向大家介绍mac能读写的移动硬盘有哪些以及移动硬盘怎么在mac上读写。 一、Mac能读写的移动硬盘有哪些 移…

数据挖掘(5.1)--贝叶斯分类

目录 前言 正文 1.主观概率 2.贝叶斯定理 1.基础知识 2.贝叶斯决策准则 3.极大后验假设 4.例题 2.朴素贝叶斯分类模型 朴素贝叶斯分类器的算法描述&#xff1a; 朴素贝叶斯算法特点 3.贝叶斯信念网 贝叶斯网络的建模包括两个步骤 贝叶斯信念网特点 开往夏天的列…

C++第七章:类

类 一、定义抽象数据类型1.1 定义抽象数据类型类的用户 1.2 定义一个书籍类引入this引入const成员函数类作用域和成员函数在类的外部定义成员函数定义一个返回this对象的函数 1.3 定义类相关的非成员函数定义read和print函数最终代码 1.4 构造函数合成的默认构造函数某些类不能…

真相只有一个——真正排名

这里写目录标题 1.题目描述2.解题思路3.代码展 所属专栏&#xff1a;脑筋急转弯❤️ &#x1f680; >博主首页&#xff1a;初阳785❤️ &#x1f680; >代码托管&#xff1a;chuyang785❤️ &#x1f680; >感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持…

【论文阅读】Group Emotion Detection Based on Social Robot Perception

【论文阅读】Group Emotion Detection Based on Social Robot Perception 摘要1.介绍2.相关工作3.方法4.数据集生成5.模拟与结果6.讨论 摘要 本篇博客参考MDPI sensors 2022收录的论文Group Emotion Detection Based on Social Robot Perception&#xff0c;对其主要内容进行总…

第三期:那些年,我们一起经历过的链表中的浪漫

PS&#xff1a;每道题解题方法不唯一&#xff0c;欢迎讨论&#xff01;每道题后都有解析帮助你分析做题&#xff0c;答案在最下面&#xff0c;关注博主每天持续更新。 1. 两个链表的第一个公共节点 “我走过我的世界&#xff0c;再从你的世界走一遍” “你走过你的世界&#x…

1688商品ID采集一件代发详情页面数据

本篇博文介绍了对1688商品详情API的二次封装&#xff0c;将URL参数封装成Python函数&#xff0c;直接传入参数即可获取搜索结果&#xff0c;例如1688商品标题、价格、一件代发、sku属性和URL等。提供了详细的代码示例和接口调用Demo。 1688.item_get-获得1688商品详情数据 1.请…

C语言中的类型转换

C语言中的类型转换 隐式类型转换 整型提升 概念&#xff1a; C语言的整型算术运算总是至少以缺省&#xff08;默认&#xff09;整型类型的精度来进行的为了获得这个精度&#xff0c;表达式中字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换成为整型提升 如…

MySQL | JDBC连接数据库详细教程【全程干货】

文章目录 一、什么是JDBC&#xff1f;二、JDBC工作原理三、使用JDBC连接MySQL数据库【✔】1、安装对应数据驱动包2、将jar包导入项目中3、编写代码连接数据库【⭐】1️⃣ 创建数据源2️⃣ 和数据库建立网络连接3️⃣ 构造SQL语句4️⃣ 执行SQL语句5️⃣ 断开连接&#xff0c;释…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)推理文本(中文chatgpt版)

设置 Setup产品评论文本情感&#xff08;正面/负面&#xff09;Sentiment (positive/negative)识别情绪类型从客户评论中提取产品和公司名称一次完成多项任务Inferring topics 推断主题为某些主题制作新闻提醒 Inferring 推理 在本课中&#xff0c;您将从产品评论和新闻文章中推…