用咖啡来理解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.mzph.cn/news/850994.shtml

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

相关文章

解锁ChatGPT:从GPT-2实践入手解密ChatGPT

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

【深度学习】—— 神经网络介绍

神经网络介绍 本系列主要是吴恩达深度学习系列视频的笔记,传送门:https://www.coursera.org/deeplearning-ai 目录 神经网络介绍神经网络的应用深度学习兴起的原因 神经网络,全称人工神经网络(Artificial Neural Network&#xf…

私有化AI搜索引擎FreeAskInternet

什么是 FreeAskInternet FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器,并使用 LLM 生成答案,无需 GPU。用户可以提出问题,系统将使用 searxng 进行多引擎搜索,并将搜索结果合并到ChatGPT3.5 LLM 中,并…

Python私教张大鹏 Vue3整合AntDesignVue之Breadcrumb 面包屑

显示当前页面在系统层级结构中的位置&#xff0c;并能向上返回。 何时使用 当系统拥有超过两级以上的层级结构时&#xff1b; 当需要告知用户『你在哪里』时&#xff1b; 当需要向上导航的功能时。 案例&#xff1a;面包屑导航基本使用 核心代码&#xff1a; <template…

【Linux文件篇】系统文件、文件描述符与重定向的实用指南

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;相信大家对文件都不会太陌生、也不会太熟悉。在没有学习Linux操作系统时&#xff0c;我们在学习C或C时都学过如何去创建、打开、读写等待文件的操作&#xff0c;知道一些语言级别的一些接口与函数。但…

冯喜运:6.10周一黄金原油行情趋势分析及独家操作建议

【黄金消息面分析】&#xff1a;上周全球金融市场惊现戏剧性大逆转&#xff0c;美国多项经济数据证实劳动力市场降温&#xff0c;9月降息重返视野令全球风险情绪几乎陷入狂热状态&#xff0c;全球股市接连创新高&#xff0c;但上周五意外“爆表”的非农令市场惊现大逆转&#x…

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 一.曲线1.train_acc2.val_acc3.train_loss4.lr 二.代码 本文介绍了如何基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 特别说明: 1.NoActive:没有任何激活函数 2.SparseActiva…

调研管理系统的设计

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

腾讯云和windows11安装frp,实现内网穿透

一、内网穿透目的 实现公网上&#xff0c;访问到windows上启动的web服务 二、内网穿透的环境准备 公网服务器、windows11的电脑、frp软件(需要准备两个软件&#xff0c;一个是安装到公网服务器上的&#xff0c;一个是安装到windows上的) frp下载地址下载版本 1.此版本(老版…

论文阅读:Indoor Scene Layout Estimation from a Single Image

项目地址&#xff1a;https://github.com/leVirve/lsun-room/tree/master 发表时间&#xff1a;2018 icpr 场景理解&#xff0c;在现实交互的众多方面中&#xff0c;因其在增强现实&#xff08;AR&#xff09;等应用中的相关性而得到广泛关注。场景理解可以分为几个子任务&…

C++ 内联函数 auto关键字

内联函数 用inline修饰的函数会成为内联函数&#xff0c;内联函数会在编译的阶段在调用函数的位置进行展开&#xff0c;不会涉及建立栈帧以提高效率&#xff0c;同时每一次的函数调用都会展开整个函数导致内存消耗的增加&#xff0c;是以空间换时间&#xff0c;所以内联函数比…

SpringSecurity入门(二)

8、获取用户认证信息 三种策略模式&#xff0c;调整通过修改VM options // 如果没有设置自定义的策略&#xff0c;就采用MODE_THREADLOCAL模式 public static final String MODE_THREADLOCAL "MODE_THREADLOCAL"; // 采用InheritableThreadLocal&#xff0c;它是Th…

最新下载:Navicat for MySQL 11软件安装视频教程

软件简介&#xff1a; Navicat for MySQL 是一款强大的 MySQL 数据库管理和开发工具&#xff0c;它为专业开发者提供了一套强大的足够尖端的工具&#xff0c;但对于新用户仍然易于学习。Navicat For Mysql中文网站&#xff1a;http://www.formysql.com/ Navicat for MySQL 基于…

NLP实战入门——文本分类任务(TextRNN,TextCNN,TextRNN_Att,TextRCNN,FastText,DPCNN,BERT,ERNIE)

本文参考自https://github.com/649453932/Chinese-Text-Classification-Pytorch?tabreadme-ov-file&#xff0c;https://github.com/leerumor/nlp_tutorial?tabreadme-ov-file&#xff0c;https://zhuanlan.zhihu.com/p/73176084&#xff0c;是为了进行NLP的一些典型模型的总…

如何远程桌面连接?

远程桌面连接是一种方便快捷的方式&#xff0c;可以帮助用户在不同地区的设备之间实现信息的远程通信。我们将介绍一种名为【天联】的组网产品&#xff0c;它可以帮助用户轻松实现远程桌面连接。 【天联】组网是一款异地组网内网穿透产品&#xff0c;由北京金万维科技有限公司…

绿联Nas docker 中 redis 老访问失败的排查

部署了一些服务&#xff0c;老隔3-5 天其他服务就联不上 redis 了&#xff0c;未确定具体原因&#xff0c;只记录观察到的现象 宿主机访问 只有 ipv6 绑定了&#xff0c;ipv4 绑定挂掉了 其他容器访问 也无法访问成功 当重启容器后&#xff1a; 一切又恢复正常。 可能的解…

MATLAB | 透明度渐变颜色条

hey 各位好久不见&#xff0c;今天提供一段有趣的小代码&#xff0c;之前刷到公众号闻道研学的一篇推送MATLAB绘图技巧 | 设置颜色条的透明度&#xff08;附完整代码&#xff09;&#xff08;https://mp.weixin.qq.com/s/bVx8AVL9jGlatja51v4H0A&#xff09;&#xff0c;文章希…

机器学习周记(第四十二周:AT-LSTM)2024.6.3~2024.6.9

目录 摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 LSTM3.2 注意力机制概述3.3 AT-LSTM3.4 数据预处理 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 训练参数4.3.2 数据集4.3.3 实验设置4.3.4 实验结果 5. 基于pytorch的transformer 摘要 本周阅读…

免费,C++蓝桥杯等级考试真题--第11级(含答案解析和代码)

C蓝桥杯等级考试真题--第11级 答案&#xff1a;D 解析&#xff1a; A. a b; b a; 这种方式会导致a和b最终都等于b原来的值&#xff0c;因为a的原始值在被b覆盖前没有保存。 B. swap(a&#xff0c;b); 如果没有自定义swap函数或者没有包含相应的库&#xff0c;这个选项会编…

【C++题解】1389 - 数据分析

问题&#xff1a;1389 - 数据分析 类型&#xff1a;简单循环 题目描述&#xff1a; 该方法的操作方式为&#xff0c;如果要传递 2 个数字信息给友军&#xff0c;会直接传递给友军一个整数 n&#xff08;n 是一个 10 位以内的整数&#xff09;&#xff0c;该整数的长度代表要传…