用咖啡来理解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…

python生成免费的ssl证书

测试SSL证书不需要验证域名权限 执行 pip install cryptography from cryptography import x509 from cryptography.x509.oid import NameOID from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import r…

私有化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;知道一些语言级别的一些接口与函数。但…

【Anaconda】 anaconda常用命令总结

【Anaconda】 anaconda常用命令总结 一、创建虚拟环境二、激活/使用/进入某个虚拟环境三、退出当前环境四、复制某个虚拟环境五、删除某个环境六、查看当前所有环境七、查看当前虚拟环境下的所有安装包八、安装或卸载包(进入虚拟环境之后&#xff09;九、分享虚拟环境十、源服务…

leetcode刷题记录34-100297. 找到连续赢 K 场比赛的第一位玩家

问题描述 有 n 位玩家在进行比赛&#xff0c;玩家编号依次为 0 到 n - 1 。 给你一个长度为 n 的整数数组 skills 和一个 正 整数 k &#xff0c;其中 skills[i] 是第 i 位玩家的技能等级。skills 中所有整数 互不相同 。 所有玩家从编号 0 到 n - 1 排成一列。 比赛进行方式如…

实体商铺私域流量打造策略:从引流到转化的全链路解析

在数字化时代&#xff0c;实体商铺面临着前所未有的挑战与机遇。随着线上购物的兴起&#xff0c;传统商铺如何吸引并留住顾客&#xff0c;成为了每个实体店家必须面对的问题。私域流量的打造&#xff0c;正是解决这一问题的关键所在。本文将从引流、留存、转化三个方面&#xf…

Java基础教程 - 15 进阶部分

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 15 进阶部分 网络编程、注解、反射、泛型、新特性等&#xff0c;见高级部分。 继续学习 Java进阶教程

冯喜运: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…

Spring (49)OpenFeign

OpenFeign是Spring Cloud在Feign的基础上进行了增强&#xff0c;使其更易于与Spring Boot应用集成。它提供了一种声明式的方法来调用HTTP服务&#xff0c;从而简化了服务间调用的开发。下面我们将通过源码解析和代码演示来深入理解OpenFeign的工作原理及其使用方法。 1. 核心概…

调研管理系统的设计

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

【JS封装-工具函数】强化编程实践:精选JavaScript函数封装集锦-关于工具函数 (如深度克隆、浅拷贝、递归、防抖和节流等)

目录 浅拷贝 深度克隆 递归函数示例&#xff1a;计算数组深度 防抖函数 节流函数 扁平化数组 检查对象是否为空 生成随机字符串 深度比较两个对象是否相等 浅拷贝 /*** 浅拷贝对象或数组。* param {Object|Array} obj 要拷贝的对象或数组。* returns {Object|Array} …

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

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

C/C++|std::function 浅度解析

std::function 是 C 标准库中的一个通用多态函数包装器。它可以存储、复制和调用任意可调用目标&#xff08;函数、lambda 表达式、绑定表达式或其他函数对象&#xff09;。 std::function 占有固定尺寸的内存&#xff0c;这是因为它的实现方式决定了这一点。让我们深入探讨这一…

论文阅读: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…