用咖啡来理解springboot3的自动配置机制

news2024/12/28 2:35:35

大家好,这里是教授.F

目录

前提知识:

场景引入:

        1.Starter依赖:

        2.默认配置:

        3.自定义配置:

        4.条件化配置:

        5.自动装配:

具体过程:

        扫包路径的配置:

        配置的默认值:

           按需加载自动配置:     


前提知识:

        1。所有的boot项目都有一个spring-boot-starter-parent父项目。这个parent的父项目是spring-boot-dependencies。

        2.maven依赖的传递规则:如果A-B-C,则A同时拥有B和C

场景引入:

        我们像做一杯咖啡,首先要有一台咖啡机。springboot比ssm这些框架相比,就是springboot是一台智能的咖啡机,而ssm是一台需要手动的咖啡机。

        学习springbooot3中自动配置机制需要从五个点出发:

        1.Starter依赖:

         所谓的Starter依赖就是拥有一台咖啡机,每个Starter依赖都包含了一组相关的库和依赖,以简化项目配置。通过引入对应的Starter依赖,可以自动配置相关的功能模块。

        用咖啡机来理解就是用了Starter的依赖,就能实现从一台老式咖啡机变成智能咖啡机。

        2.默认配置:

         默认配置类似于一台智能的咖啡机的默认属性,比如我们电源打开,点击开始,咖啡机一定有默认的参数,比如咖啡豆放多少,水温多少......

       利用 @Configuration 注解的配置类来定义自动配置。这些配置类会根据条件来注册相应的 Bean,从而实现特定功能的自动配置。这些自动配置类会根据类路径中的依赖和条件来确定是否生效,并根据需要注册相应的 Bean。

        3.自定义配置

         但是,也许你想要调整咖啡的浓度或温度,或者使用自己喜欢的咖啡豆。这时,你可以通过按下咖啡机上的特定按钮,或者调节咖啡机的参数来自定义配置。在 Spring Boot 中,你可以通过编写自己的配置类或者属性文件,来覆盖默认的配置,实现自定义的配置。

springboot3具体实现:

  1. 编写自定义配置类:开发者可以通过编写自己的配置类,使用 @Configuration 注解标记这些类,并在其中使用 @Bean 注解来声明需要自定义的 Bean。这样可以覆盖默认的配置,实现自定义的配置。
  2. 属性文件:开发者可以通过编写属性文件(如 application.properties 或 application.yml)来覆盖默认的配置。在属性文件中指定自定义的属性值,如数据库连接信息、日志级别等,从而实现自定义的配置。

        4.条件化配置

         假设你有一个家庭成员对咖啡因过敏,不喝含咖啡因的咖啡。在这种情况下,你希望咖啡机只在特定条件下(比如时间是早晨、没有特殊要求的情况下)才会冲泡不含咖啡因的咖啡。类似地,在 Spring Boot 中,你可以使用条件化配置,根据特定的条件来决定是否启用某些配置。

        5.自动装配:

        最后,假设你新买了一个咖啡机的配件,比如一个磨豆器。你只需将这个配件插入到咖啡机上的特定插槽中,咖啡机会自动识别这个配件,并根据需要进行相应的调整,以便将这个配件整合到咖啡机的工作流程中。在 Spring Boot 中,自动配置机制也类似,它会根据你应用程序的依赖、类路径和配置信息,自动装配所需的组件和功能,以简化应用程序的开发和部署过程。

以上通过一个生活化的例子进行描述,接下来就进入到springboot3中的具体实现过程。

具体过程:

        扫包路径的配置:

                当使用@SpringBootApplication标注时,就表示当前类是主程序类。SpringBoot只会扫描主程序所在的包及其下面的子包,自动的component-scan功能。

                此外也可以自动配置:

                        @SpringBootApplication(scanBasePackages = "com.atguigu")        

       @ComponentScan("com.atguigu") 直接指定扫描的路径

        配置的默认值:

                    配置文件的所有配置项是和某个类的对象值进行一一绑定的。

                     绑定了配置文件中每一项值的类: 属性类

           按需加载自动配置:     

                        导入场景spring-boot-starter-web

         场景启动器除了会导入相关功能依赖,导入一个spring-boot-starter,是所有starterstarter,基础核心starter

                         spring-boot-starter导入了一个包 spring-boot-autoconfigure。包里面都是各种场景的AutoConfiguration自动配置类

                          虽然全场景的自动配置都在 spring-boot-autoconfigure这个包,但是不是全都开启的。【导入哪个场景就开启哪个自动配置】

总结: 导入场景启动器、触发 spring-boot-autoconfigure这个包的自动配置生效、容器中就会具有相关场景的功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808112.html

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

相关文章

JVisuaIVM监控Jstatd启动时报错

一、 启动监控Jstatd报错 当我们在windows系统上面启动的时候好好的,在linux上面启动报错,提示报错如下,好像每一什么权限之类的 在tomcat下面查看你的项目使用的java版本,vi /usr/local/tomcat7-8083/bin/catalina.sh 查看我的…

shell编程(三)—— 运算符

和其他编程语言一样,bash也有多种类型的运算符,本篇对bash的相关运算符做简单介绍。 一、运算符 1.1 算术运算符 常见的算术运算符,如加()、减(-)、乘(*)、除&#xf…

使用Leaflet-canvas-label进行个性化标注实践详解

目录 前言 一、leaflet-canvas-label属性 1、地图展示属性 2、Canvas文本标注属性 3、事件列表 二、属性设置实战 1、标注放大比例 2、字体颜色和方向偏移 3、标注文字透明色设置 4、标注显示层级 三、事件绑定 1、颜色改变 2、事件绑定解析 3、标记初始化的一个小…

html5实现个人网站源码

文章目录 1.设计来源1.1 网站首页页面1.2 个人工具页面1.3 个人日志页面1.4 个人相册页面1.5 给我留言页面 2.效果和源码2.1 动态效果2.2 目录结构 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/139564407 ht…

427. 建立四叉树

427. 建立四叉树 题目难度-中等1. dfs分治 题目难度-中等 给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。 你需要返回能表示矩阵 grid 的 四叉树 的根结点。 四叉树数据结构中,每个内部节点只有四个子节点。此外…

音程与和弦 音程协和度

2个音符之间的音程计算 1234567,1到7的音程是7度,音程是计算总长度,看音级的个数。 Cubase中的音程计算 下面一个是4度,一个是3度,格子中深色的行就是黑键行。 根据半音数量来确定对应音程的专业术语叫法 旋律音程、…

国产嵌入式仪器模块:电子负载模块及自动化测试软件

• 输入电流在 0–5 A 范围内线性可调 • 最大功率达 150 W,满足多种定制化应用场景 • 支持 CC/CR/CV 多种工作模式 • 支持多种辅助模块(如 PD 控制、信号调制、二维码扫描) 应用场景 • 负载能力测试(电源或信号&#xff0…

opencv--使用opencv实现旋转角度的模板匹配

下面的例子是简单的使用opencv 实现的模板匹配流程,其中时间性能和精确度还需要调整,如果直接使用会出问题,所以这个只是例子,根据代码原理可以实现尺度变化的模板匹配和旋转尺度变化同时,具体根据实现的旋转代码进一步…

【Unity学习笔记】反射

文章目录 前言反射通过反射获取类型 Unity中的反射用反射在Unity中动态加载 前言 在我平时做项目的时候,由于我们做的项目都是很简单的,所以不怎么接触反射机制。最早了解反射机制是关于Invoke的时候,知道可以通过方法名来直接进行Invoke调用…

【会议征稿,IEEE出版】第三届能源与电力系统国际学术会议 (ICEEPS 2024,7月14-16)

如今,全球能源行业正面临着前所未有的挑战。一方面,加快向清洁、可再生能源转型是遏制能源环境污染问题的最佳途径之一;另一方面,电力系统中新能源发电、人工智能技术、电力电子装备等被广泛应用和期待,以提高能源可持…

汇编:结构体

在32位汇编中,结构体(structures)用于组织和管理复杂的数据类型,结构体可以包含多个不同类型的数据项(成员);在MASM(Microsoft Macro Assembler)中,使用结构体…

Qt——升级系列(Level Four):控件概述、QWidget 核心属性、按钮类控件

目录 控件概述 QWidget 核心属性 核心属性概览 enabled geometry windowTitle windowIcon windowOpacity cursor font toolTip focusPolicy styleSheet 按钮类控件 Push Button Radio Buttion Check Box Tool Button 控件概述 Widget 是 Qt 中的核⼼概念. 英⽂原义是 "…

10.结构体、共用体、枚举

头文件&#xff1a;#include<string.h> //struct&#xff1a;结构体关键字 //stu&#xff1a;结构体类型名&#xff0c;指定了一个结构体类型&#xff0c;它相当于一个模型&#xff0c;但其中并无具体数据&#xff0c;系统对之也不分配实际内存单元//使用结构体类型必须是…

CDR2024软件破解Keygen激活工具2024最新版

CorelDRAW Graphics Suite2024最新版&#xff0c;这是一款让我爱不释手的图形设计神器&#xff01;作为一个软件评测专家&#xff0c;我一直在寻找一款能够提升我的设计效率和创造力的工具。而这款软件&#xff0c;简直就是为我量身定制的&#xff01;&#x1f389; 「CorelDR…

北航第五次数据结构与程序设计编程题复习

北航第五次数据结构与程序设计编程题复习 树叶节点遍历&#xff08;树-基础题&#xff09;计算器&#xff08;表达式计算-表达式树实现&#xff09;服务优化词频统计&#xff08;树实现&#xff09; 树叶节点遍历&#xff08;树-基础题&#xff09; 【问题描述】 从标准输入中…

OpenCV学习(4.9) OpenCV中的轮廓

1.目标 了解轮廓是什么。学习寻找轮廓&#xff0c;绘制轮廓等您将看到以下功能&#xff1a;**cv.findContours()** &#xff0c;**cv.drawContours()* 2.什么是轮廓 轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线。轮廓是用于形状分析以及对象检测…

嵌入式学习——Linux高级编程复习(互斥锁、信号量、管道、信号)——day41

1. 同步和异步 1.1 同步 多个任务在某一时刻,先后执行顺序可以被确定 同步操作要求一系列操作严格按照顺序执行&#xff0c;一个操作只有在前一个操作完成之后才能开始。在计算机编程中&#xff0c;这意味着当一个程序或线程发出一个请求或调用后&#xff0c;它会暂停执行&…

java自动化之java基础03-09java基础之数组

数组 1、定义 数组是一种用于存储固定大小的同类型数据的数据结构 1&#xff09;固定大小 2&#xff09;同类型数据的存储 2、声明数组 1&#xff09;数据类型[] 变量名称&#xff1b; 例如&#xff1a;int[] numsArry; 2&#xff09;数据类型 变量名称[]; 例如&#xf…

27.机会成本

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/677 题目描述 明天有 𝑛n 门考试,今晚只…

【C++修行之道】类和对象(五)日期类的实现、const成员、取地址及const和取地址操作符重载

目录 一、 日期类的实现 Date.h 1.1 GetMonthDay函数&#xff08;获取某年某月的天数&#xff09; 问&#xff1a;这个函数为什么不和其他的函数一样放在Date.cpp文件中实现呢&#xff1f; 1.2 CheckDate函数&#xff08;检查日期有效性&#xff09;、Print函数&#xff08;…