springBoot-自动配置原理

以下笔记内容, 整理自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的启动入口

java 复制代码
// 声明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 的 场景启动器

XML 复制代码
<!--        添加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的自动配置

相关推荐
yunmi_5 分钟前
微服务,Spring Cloud 和 Eureka:服务发现工具
java·spring boot·spring cloud·微服务·eureka·架构·服务发现
paopaokaka_luck1 小时前
基于SpringBoot+Vue的志行交通法规在线模拟考试(AI问答、WebSocket即时通讯、Echarts图形化分析、随机测评)
vue.js·人工智能·spring boot·后端·websocket·echarts
程序定小飞2 小时前
基于springboot的蜗牛兼职网的设计与实现
java·数据库·vue.js·spring boot·后端·spring
咖啡Beans2 小时前
RestTemplate调用API的常用写法
java·spring boot·网络协议
卷Java2 小时前
预约记录关联查询接口说明
java·开发语言·spring boot·python·微信小程序
跟着珅聪学java4 小时前
vue通过spring boot 下载文件教程
前端·spring boot·后端
Keepreal4965 小时前
1小时快速上手SpringBoot,熟练掌握CRUD
spring boot·后端
种时光的人21 小时前
无状态HTTP的“记忆”方案:Spring Boot中Cookie&Session全栈实战
服务器·spring boot·后端·http
编啊编程啊程1 天前
gRPC从0到1系列【19】
java·spring boot·rpc·dubbo·nio