springBoot-自动配置原理

news2024/9/27 4:00:34

以下笔记内容, 整理自B站黑马springBoot视频,抖音Holis

1、自动配置原理


1.收集Spring开发者的编程习惯,整理开发过程使用的常用技术列表一>(技术集A)
2.收集常用技术(技术集A)的使用参数,整理开发过程中每个技术的常用设置列表一>(设置集B)
3.初始化SpringBoot基础环境,加载用户自定义的bean和导入的其他坐标,形成初始化环境

4.将技术集A包含的所有技术都定义出来,在Spring/SpringBoot启动时默认全部加载


5.将技术集A中具有使用条件的技术约定出来,设置成按条件加载,由开发者决定是否使用该技术(与初始化环境比对)
6.将设置集B作为默认配置加载(约定大于配置),减少开发者配置工作量
7.开放设置集B的配置覆盖接口,由开发者根据自身需要决定是否覆盖默认配置

2、springBoot自动配置原理详细说明

2.1springBoot的启动入口


// 声明Spring Boot应用的主类,springBoot从这里启动
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        // 启动Spring Boot应用, 返回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        

springBoot从这个主程序去启动,主要是@SpringBootApplication ,点进去发现这是一个复合注解,  包含了 @EnableAutoConfiguration , springBoot正是通过这个@EnableAutoConfiguration来实现自动配置的。

EnableAutoConfiguration注解的源码:下面是

注意看, 这个EnableAutoConfigurationImportSelector就是自动配置的关键类了, 

该类通过 SpringFactoriesLoader.loadFactoryNames()读取了ClassPath下面的META-INF/spring.factories (关键文件)文件。

 spring.factories 

spring.factories对应 1、自动配置原理中的技术集A , 它里边的各种AutoConfiguration对应 技术集B , 

用org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration举个例子, 

我们在主程序中遍历输出 ioc容器帮我们加载了什么

// 启动Spring Boot应用, 返回IOC容器
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for(String name: names){
System.out.println(name);
}

在控制台搜索发现, 根本没有含有redis的组件

此时, 我们如果在pom.xml中加入 redis 的 场景启动器

<!--        添加redis的场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

再次运行主程序,会发现控制台输出的组件列表中 有了 redis, 

说明虽然spingBoot帮我们准备了 技术集合A,配置集合B, 但是需要我们自己去通过场景启动器选择加载哪些需要的配置

小结:

 简单点理解还可以这么来, 即spingBoot帮我们准备了一大堆的食材(spring.factories), 且这堆食材按菜名分类打包好了(AutoConfiguration) , 我们就是厨师,指定要做什么菜(starter场景启动器,根据条件装配@Conditional~~,帮我们自动配置bean),然后再指出自己个性化的菜单(即application.properties 或者是 yml)  , 最后springBoot根据我们需要的菜,及个性化的指定 , 帮我们自动配置好菜品, 这就是整个自动化配置的原理的理解。

具体面试,还是要按照专业一点的解释。

专业化解释:

3、应用总结

         自动配置相当于自动档,我们需要先懂得各种技术(ssm,redis,mybatisPlus)的手动档配置, 再结合自动配置帮我们配置了什么,我们还需要什么配置什么, 我们才真正能够应用好spingBoot的自动配置

  

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

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

相关文章

NULL是什么?

NULL是一个编程术语&#xff0c;通常用于表示一个空值或无效值。在很多编程语言中&#xff0c;NULL用于表示一个变量或指针不引用任何有效的对象或内存位置。 NULL可以看作是一个特殊的值&#xff0c;表示缺少有效的数据或引用。当一个变量被赋予NULL值时&#xff0c;它表示该变…

Day28 17电话号码的字母组合 39组合求和 40组合求和II

17 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 因为输入的数字的数量是不确定的&#xff0c;所以for循环的次数也是不确定的&…

基于JAVA的用户画像活动推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

Linux的权限(1)

目录 操作系统的"外壳"程序 外壳程序是什么&#xff1f; 为什么存在外壳程序&#xff1f; 外壳程序怎么运行操作&#xff1f; 权限 什么是权限&#xff1f; 权限的本质&#xff1f; Linux中的&#xff08;人&#xff09;用户权限&#xff1f; su和su -的区别…

安装rlwrap库出现问题

背景&#xff1a;oracle的sqlplus还是那么难用&#xff0c;不知道为什么不打包解决这个问题&#xff0c;留给用户&#xff0c;内核硬&#xff0c;就是猖狂。废话不多说。下载解压rlwrap-0.46.1.tar.gz;进入/tmp/database/rlwrap-0.46.1源码包&#xff0c;./configure checki…

大数据技术原理与应用期末复习(林子雨)

大数据技术原理与应用期末复习&#xff08;林子雨&#xff09; Hadoop的特性HBase编程实践NoSQL的四大类型键值数据库优点&#xff1a;缺点&#xff1a; 列族数据库优点&#xff1a;缺点&#xff1a; 文档数据库优点&#xff1a;缺点&#xff1a; 图数据库优点&#xff1a;缺点…

计算机网络面试八股复习:常见的Http状态码

前言 面试被问到过一次。自己最近使用Gin框架&#xff0c;在Response的时候有时候也会用到一个自定义的状态码。因此归纳一下这方面&#xff0c;供自己日后面试复习以及开发时候参考。 HTTP 全名“超文本传输协议”&#xff08;我也不懂为什么面试官问这个…&#xff09; 属…

TypeScript基础(二)扩展类型-枚举及其位运算

✨ 专栏介绍 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript通过添加静态类型和其他特性来增强JavaScript&#xff0c;使其更适合大型项目和团队开发。 在TypeS…

springboot实现黑名单和白名单功能

题外话 关于黑名单和白名单功能&#xff0c;我觉得可以直接用linux服务器的iptables或nftables来实现黑名单和白名单功能。这两个工具都是Linux系统上用于配置防火墙规则的命令行工具。 iptables&#xff1a; 描述&#xff1a; iptables 是一个用于配置IPv4数据包过滤规则的工具…

Spring Task 任务调度工具

大家好我是苏麟 , 今天聊聊Spring Task 任务调度工具 Spring Task Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a;定时任务框架 作用&#xff1a;定时自动执行某段Java代码 什么是定时任务 ? 通过时…

uni-app做A-Z排序通讯录、索引列表

上图是效果图&#xff0c;三个问题 访问电话通讯录&#xff0c;拿数据拿到用户的联系人数组对象&#xff0c;之后根据A-Z排序根据字母索引快速搜索 首先说数据怎么拿 - 社区有指导https://ask.dcloud.net.cn/question/64117 uniapp 调取通讯录 // #ifdef APP-PLUSplus.contac…

怎么把身份证压缩到200k以下?一分钟教你如图片压缩

在网络平台办理一些业务的时候&#xff0c;经常会需要上传我们的身份证照片&#xff0c;但是大多数平台为了用户体验&#xff0c;会限制上传的图片大小&#xff0c;比如图片不得超过200kb&#xff0c;当我们提交的身份证图片超出限制&#xff0c;就无法顺利提交&#xff1b;这时…

每日一练:LeeCode-104. 二叉树的最大深度【二叉树】

本文是力扣LeeCode-104. 二叉树的最大深度 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例…

Asp .Net Web应用程序(.Net Framework4.8)网站发布到IIS

开启IIS 如果已开启跳过这步 打开控制面板-程序 打开IIS 发布Web程序&#xff08;.Net Framework 4.8 web网页&#xff09; 进入IIS管理器新建一个应用池 新建一个网站 网站创建完毕 为文件夹添加访问权限 如果不添加访问权限&#xff0c;运行时将会得到如下错误 设置权限 勾…

可以在微信群里使用midjourney,gpt4,gemini,文心一言4.0,且免费

免费使用gpt4和midjourney 免费使用 参考链接&#xff1a; https://chat.xutongbao.top/

用React给XXL-JOB开发一个新皮肤(三):实现登录页和Layout骨架

目录 一. 简述二. 接口服务调整 2.1. 登录接口2.2. 登出接口2.3. 修改密码接口2.4. 修改配置文件 三. 前端HTTP 请求四. 登录页面 4.1. 搭建登录页面4.2. 对接登录接口 五. Layout 骨架 5.1. 搭建骨架5.2. Header5.3. 修改密码5.4. 退出登录 六. 其他 一. 简述 上一篇文章我…

【栈】【字符】Leetcode 20 有效的括号

【栈】【字符】Leetcode 20 有效的括号 解法1 栈的操作&#xff08;先进后出&#xff09; ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 栈的操作&#xff08;先进后出&#xff09; 新建栈&#xff1a;Stack<C…

Oracle篇—实例中和name相关参数的区别和作用

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

数据挖掘实战-基于机器学习的电商文本分类模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【算法分析与设计】跳跃游戏

题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - …