springBoot-自动配置原理

news/2025/3/27 14:06:42/

以下笔记内容, 整理自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场景启动器),然后再指出自己个性化的菜单(即application.properties 或者是 yml)  , 最后springBoot根据我们需要的菜,及个性化的指定 , 帮我们自动配置好菜品, 这就是整个自动化配置的原理的理解。

专业化解释:

3、应用总结

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

  

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

相关文章

服务发现Discovery

对于注册进eureka里面的微服务&#xff0c;可以通过服务发现来获得该服务的信息 1、 修改cloud-provider-payment8001的controller import com.my.springcloud.utils.RestResponse; import com.my.springcloud.entities.Payment; import com.my.springcloud.service.PaymentSe…

Mariadb和mysql数据库的区别和相同之处

目 录 一、maridb 和mysql在linux系统中广泛应用 二、MySQL数据库 三、MariaDB数据库 四、MariaDB和MySQL有哪些相同点 五、MariaDB和MySQL的不同点 一、mariadb 和mysql在linux系统中广泛应用 用linux&#xff08;包括centos和Ubuntu&#xff09;的都知道&a…

java基础---循环结构

循环结构&#xff1a; for结构&#xff1a; - 语法&#xff1a; ​ // 1 2 3 ​ for(要素1;要素2;要素3){ ​ 语句块/循环体----------------反复执行的代码 4 ​ } - 执行过程&#xff1a; ​ 1243243243243243243....…

【css技巧】css设置文字不能被选中

ChatGPT4.0国内站点&#xff1a;海鲸AI 在CSS中&#xff0c;如果你想让文本内容不能被用户选中&#xff0c;可以使用user-select属性。这个属性可以控制用户是否能够选择文本。以下是如何使用这个属性的例子&#xff1a; .unselectable {-webkit-user-select: none; /* Safar…

借用GitHub将typora图片文件快速上传CSDN

前情概要 众所周知&#xff0c;程序员大佬们喜欢用typora软件写代码笔记&#xff0c;写了很多笔记想要放到CSDN上给其他大佬分享&#xff0c;但是在往csdn上搬运的时候&#xff0c;图片总是上传出错&#xff0c;一张一张搞有很麻烦&#xff0c;咋如何搞&#xff1f; 废话不多…

mysql进阶-视图

目录 1. 用途 2. 语法 2.1 创建或替换视图 2.2 修改视图 2.3 查看视图&#xff1a; 2.4 删除视图&#xff1a; 3. 其他 3.1 操作视图 3.2 迁移数据库 1. 用途 视图可以理解为一个复杂查询的简称&#xff0c;它可以帮助我们简化查询&#xff0c;主要用于报表查询:例如…

如果能用盗版省下钱好好对待员工也行

要是能用盗版省下钱好好对待员工也行&#xff0c;不过这看来也是不可能&#xff0c;他能这样对待别人也会这样对待自己人&#xff01; 据说用盗版设计软件设计出来的芯片&#xff0c;产品质量本身会很差!而再这样对待自己的员工&#xff0c;产品做的咋样可想而知&#xff01;…

【排序算法】一、排序概念和直接插入排序(C/C++)

「前言」文章内容是排序算法之直接插入排序的讲解。&#xff08;所有文章已经分类好&#xff0c;放心食用&#xff09; 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、排序概念的介绍二、直接插入排序2.1 原理2.2 代码实现&#xff08;C/C&#xf…