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

大家好,这里是教授.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.mfbz.cn/a/695585.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

招聘在家抄书员?小心是骗局!!!

在家抄书员的骗局是一种常见的网络诈骗手段,旨在利用人们想要在家轻松赚钱的心理。这种骗局通常会以招聘兼职抄写员的形式出现,声称只需在家中抄写书籍即可赚取可观的收入。然而,实际上这背后隐藏着诸多陷阱和虚假承诺。 首先,这些…

生成式人工智能 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

二分#背包#快排#LCS详解

二分#背包#快排#LCS详解 文章目录 二分#背包#快排#LCS详解1. 二分搜索2. 01背包问题3. 快速排序4. 最长公共子序列 1. 二分搜索 在处理大规模数据集时,查找操作的效率显得尤为重要。二分搜索是一种在有序数组中查找目标值的高效算法,其时间复杂度为O(lo…

超详细 | 使用Nexus搭建私服 (带代码演示)

为什么需要搭建私有仓库? 在企业开发的过程中,不是所有公司都能直接访问外网。在这种情况下,就需要在局域网内找一台有外网访问权限的服务器,搭建Nexus私服仓库,开发人员连接到这台私服上,通过搭建的Nexus…

Golang | Leetcode Golang题解之第142题环形链表II

题目: 题解: func detectCycle(head *ListNode) *ListNode {slow, fast : head, headfor fast ! nil {slow slow.Nextif fast.Next nil {return nil}fast fast.Next.Nextif fast slow {p : headfor p ! slow {p p.Nextslow slow.Next}return p}}r…

调研管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,教师类型管理,课程类型管理,公告类型管理 前台账户功能包括:系统首页,个人中心,论坛&#…

OPPO高级项目经理曹帆受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 OPPO互联网服务系统内容生态中心高级互联网项目经理曹帆先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“加、减、乘、除——激活项目团队效能”。大会将于6月29-30日在北京举办,敬请关注! 议…

【数学】各种图面积公式的推导

Hello!大家好,我是学霸小羊,今天讲讲面积公式。 1.长方形 长方形是 由无数条 长度为长方形的长(或宽)的线 组成的图形,这些线有多少根,我们不知道,只需要知道他们垒成了一个由高 宽…

如何获取MySQL中表的大小?(官方校正版)

与大多数关系数据库一样,MySQL 提供了有关数据库本身的有用元数据。虽然大多数其他数据库将此信息称为 catalog, 但MySQL 官方文档INFORMATION_SCHEMA 将元数据 称为 tables。 目录 1 列出单个数据库中的单表大小 2 列出所有数据库中的所有表大小 以下…

【第14章】SpringBoot实战篇之多环境配置

文章目录 前言一、通用配置文件1. 定义2. 使用2.1 application.yml2.2 启动类 3. 测试 二、多环境配置文件1.定义1.1 application-local.yml1.2 application-dev.yml1.3 application-test.yml1.4 application-prod.yml 2.使用2.1 application.yml2.2 启动类 3.测试 三、多环境配…

【机器学习】决策树模型(个人笔记)

文章目录 多样性指标基尼杂质指数(Gini Impurity Index)熵(Entropy) 决策树的应用 源代码文件请点击此处! 多样性指标 基尼杂质指数(Gini Impurity Index) 若集合中包含 m m m 个元素和 n …

【线性代数】向量空间,子空间,向量空间的基和维数

向量空间 设V为n维向量的集合,如果V非空,且集合V对于向量的加法以及数乘两种运算封闭,那么就称集合V为向量空间 x,y是n维列向量。 x 向量组等价说明可以互相线性表示 向量组等价则生成的向量空间是一样的 子空间 例题18是三位向…

人机融合既是技术也是艺术

军事智能是将人工智能技术应用于军事领域,旨在提高军事决策、指挥控制、作战效能等方面的能力。它涉及到计算机科学、数学、统计学、神经科学等多个学科领域,需要综合运用多种技术和方法。军事智能的设计和实施需要考虑到战争的本质、军事战略、战术和组…

每位比特币人都终将成为一个国际主义者

原创 | 刘教链 周末BTC(比特币)趁势向着30日均线回归,现于69k一线悬停。7万刀以下加仓的机会窗口,和那蹉跎一生的岁月一样,过一天少一天,在每个纠结和拧巴的日子里,在软弱和彷徨的等待中&#x…

小程序 UI 风格,赏心悦目

小程序 UI 风格,赏心悦目

MySQL的group by与count(), *字段使用问题

文章目录 问题group by到底做了什么举个例子简单来说为什么select字段,count()不能和*共同使用总结 问题 这是一段摘抄自MySQL官网的文字。其大致意思是MySQL拓展了group by的使用,MySQL允许选择没有出现在group by中的字段。换句话说,标准SQ…

【数据结构(邓俊辉)学习笔记】图07——最短路径

文章目录 0. 概述1. 问题2. 最短路径2.1 最短路径树2.1.1 单调性2.1.2 歧义性2.1. 3 无环性 2.2 Dijkstra 算法2.2.1 贪心迭代2.2.2 实现2.2.3 实例2.2.4 复杂度 0. 概述 学习下最短路径和Dijistra算法 1. 问题 给定带权网络G (V, E),以及源点(source…

Java日期类Date、SimpleDateFormat 日期格式类、Calendar详细介绍

目录 一、Date类1.1 Date类简单介绍1.2 Date类的构造方法代码演示 二、SimpleDateFormat 日期格式化类2.1 SimpleDateFormat 日期格式化类简单介绍2.2 构造方法代码演示 日期格式化模板常用方法代码演示注意 三、Calendar类3.1 简单介绍3.2 创建对象代码演示 3.3 静态常量3.4 常…

战略引领下的成功产品开发之路

在当今竞争激烈的市场环境中,成功的产品开发不仅仅依赖于创意和技术的卓越,更需要战略性的规划和执行。本文将探讨战略在成功产品开发中的重要性,并结合实际案例,分析如何在战略的指引下,将创意转化为商业化的产品或服…

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题 我们的简约风格,以纯洁的白色和深邃的紫色为主色调,为您提供了一种清新、时尚的浏览体验。在这个简洁而美丽的界面中,您可以轻松畅享各种精彩短视频。我们专注于简单的…