深入分析SpringBoot自动配置原理
创始人
2024-05-31 21:48:13
0

文章目录

  • 一、什么是SpringBoot的自动配置
    • 1. 配置类的示例
    • 2. SpringBoot自动配置的实例
  • 二、SpringBoot的启动流程(简化版)
    • 1. SpringBoot启动流程的简化版代码
    • 2. 主要分析一下以上启动流程中的第3步:加载并处理所有的配置类,processConfigurationClasses(..)
    • 3. 进一步分析处理配置类时的parse(..)方法
    • 4. 分析递归遍历配置类的过程
  • 三、注解@ComponentScan
    • 1. 注解@ComponentScan的示例
  • 四、注解@Import
    • 1. 注解@Import导入普通类
      • (1)创建普通的Java类
      • (2)创建一个配置类,直接将创建的普通类导入
      • (3)测试并运行
    • 2. 注解@Import导入接口ImportSelector实现类
      • (1)创建普通的Java类
      • (2)创建一个ImportSelector的实现类
      • (3)创建一个配置类,将ImportSelector的实现类导入
      • (4)测试并运行
    • 3. 导入接口ImportBeanDefinitionRegistrar的实现类
      • (1)创建普通的Java类
      • (2)创建ImportBeanDefinitionRegistrar的实现类
      • (3) 创建一个配置类,将ImportBeanDefinitionRegistrar的实现类导入
      • (4)测试并运行
  • 五、分析加载SpringBoot自动配置类的方式
  • 六、SpringBoot自动配置的原理剖析
    • 1. 一切都从注解@SpringBootApplication说起
    • 2. @SpringBootApplication结构图
    • 3. 如何实现AutoConfigurationImportSelector
    • 4. SpringFactories机制
    • 5. Java SPI机制与SpringFactories机制对比
    • 6. 类AutoConfigurationImportSelector的关键源码
    • 7. AutoConfigurationImportSelector的实现流程
    • 8. 总结
  • 七、注解@Conditional
  • 八、SpringBoot自动配置实例-Redis

一、什么是SpringBoot的自动配置

在这里插入图片描述

SpringBoot自动配置

  • 它是指基于你引入的依赖Jar包,对SpringBoot应用进行自动配置
  • 它为SpringBoot框架的“开箱即用”提供了基础支撑

术语"配置类"

  • 广义的“配置类”:被注解@Component直接或间接修饰的某个类,即我们常说的Spring组件,其中包括@Configuration类
  • 狭义的“配置类”:特指被注解@Configuration所修饰的某个类,又称为@Configuration类

如果没有特殊说明,我们说的配置类通常指的是广义的“配置类”

1. 配置类的示例

在这里插入图片描述

2. SpringBoot自动配置的实例

实例:Redis的自动配置
redis在SpringBoot中的使用步骤:

  1. 引入一个starter的依赖
  2. 配置Redis服务器的连接信息
  3. 直接使用RedisTemplate等Bean对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过以上步骤,SpringBoot就自动完成了Redis的配置,将相关的Bean对象注册到IOC容器中了

二、SpringBoot的启动流程(简化版)

1. SpringBoot启动流程的简化版代码

在这里插入图片描述
在这里插入图片描述

2. 主要分析一下以上启动流程中的第3步:加载并处理所有的配置类,processConfigurationClasses(…)

在这里插入图片描述

3. 进一步分析处理配置类时的parse(…)方法

在这里插入图片描述

4. 分析递归遍历配置类的过程

从原配置类出发,通过注解@ComponentScan和@Import不断去遍历新的配置类,直到没有新的配置类被发现为止。通过递归遍历后,得到一系列配置类,再对每个配置类进行解析处理,并将得到的BeanDefinition注册到IOC容器中

在这里插入图片描述

三、注解@ComponentScan

在这里插入图片描述

1. 注解@ComponentScan的示例

在这里插入图片描述

四、注解@Import

这个“其他地方”通常指的是第三方Jar包

1. 注解@Import导入普通类

在这里插入图片描述

(1)创建普通的Java类

在这里插入图片描述

(2)创建一个配置类,直接将创建的普通类导入

在这里插入图片描述

(3)测试并运行

在这里插入图片描述

2. 注解@Import导入接口ImportSelector实现类

在这里插入图片描述

(1)创建普通的Java类

在这里插入图片描述

(2)创建一个ImportSelector的实现类

在这里插入图片描述

(3)创建一个配置类,将ImportSelector的实现类导入

在这里插入图片描述

(4)测试并运行

在这里插入图片描述

3. 导入接口ImportBeanDefinitionRegistrar的实现类

在这里插入图片描述

(1)创建普通的Java类

在这里插入图片描述

(2)创建ImportBeanDefinitionRegistrar的实现类

在这里插入图片描述

(3) 创建一个配置类,将ImportBeanDefinitionRegistrar的实现类导入

在这里插入图片描述

(4)测试并运行

在这里插入图片描述

五、分析加载SpringBoot自动配置类的方式

SpringBoot加载配置类的方式有以下几种

在这里插入图片描述

但是加载SpringBoot的自动配置类需要选择一种合适的方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:SpringBoot使用注解@Import导入一个ImportSelector从而实现了自动配置的功能

六、SpringBoot自动配置的原理剖析

1. 一切都从注解@SpringBootApplication说起

在这里插入图片描述

@SpringBootApplication源码:
@SpringBootApplication元注解中包括了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
其中注解@EnableAutoConfiguration的含义是,开启了自动配置的功能

在这里插入图片描述

2. @SpringBootApplication结构图

在这里插入图片描述

3. 如何实现AutoConfigurationImportSelector

在这里插入图片描述
在这里插入图片描述

4. SpringFactories机制

在这里插入图片描述
在这里插入图片描述

5. Java SPI机制与SpringFactories机制对比

在这里插入图片描述

6. 类AutoConfigurationImportSelector的关键源码

在这里插入图片描述

其中getAutoConfigurationEntry方法是自动配置的入口
在这里插入图片描述

着重看下getCandidateConfigurations方法,这是基于SpringFactories机制来获取第三方Jar包中所有自动配置类的方法。
注意:从配置文件获取自动配置类时,使用的key是类EnableAutoConfiguration的全限定名

在这里插入图片描述

7. AutoConfigurationImportSelector的实现流程

在这里插入图片描述

8. 总结

在这里插入图片描述

七、注解@Conditional

在这里插入图片描述
在这里插入图片描述

八、SpringBoot自动配置实例-Redis

以spring-boot-starter-data-redis为例:

在这里插入图片描述

查看对应的pom.xml文件,可以看到对应的依赖项

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

我的团长我的团哪里能看完整版啊... 我的团长我的团哪里能看完整版啊?要的完整清晰的播放器!不是请不要'来'!在皮皮播放器上有啊。
关于青山刚昌老师和高山南(新井... 关于青山刚昌老师和高山南(新井泉)老师的资料要详细的资料青山刚昌,柯南的作者高山南,柯南的声优
央视记者观察丨巴以就加沙人道局... 蓝光超清高清流畅继续播放当前非Wi-Fi网络,继续播放将产生流量费用本周,联合国继续聚焦巴以冲突,加...
石河子市入选“全国县域旅游发展... 本报石河子讯(全媒体记者 马雪娇) 日前,第七届全国县域旅游研究成果发布系列活动现场发布了《全国...
我区三级法院将使用全国法院办案... 转自:内蒙古日报本报7月4日讯  (记者  王皓)记者从自治区高级人民法院获悉,为进一步提升司法服务...
把学习教育成果转化为履职实效 转自:法治日报本报讯 记者邢东伟 翟小功 近日,海南政法领导干部专题研讨班在海口开班,省委副书记、政...
您是“高精力”还是“低累点”? 转自:团结报  □ 王佳雯  在我们身边往往会有这样两种人——  有的人时刻精力充沛,工作和学习之余...
乱“弹”一气 转自:团结报  王 琪 作
你这个凡人,怎么会理解这种东西... 你这个凡人,怎么会理解这种东西,用古文怎么说?你这个凡人,怎么会理解这种东西汝是凡人,岂知此物
文旅商展四艘巨轮为什么锚定“文... 转自:上观新闻最近上海的文旅消费市场,出现四轮竞发的独特风景。瓦格纳巨制《特里斯坦与伊索尔德》首度亮...