SpringBoot的自动配置

SpringBoot的自动配置

  • 1. SpringBoot自动配置的定义
  • 2. 术语"配置类”
    • 2.1 定义
    • 2.2 示例
  • 3. SpringBoot自动配置的实例
  • 4. SpringBoot的启动流程
    • 4.1 简化版代码
    • 4.2 图形示例
    • 4.3 SpringBoot加载配置类的流程
      • 4.3.1 加载并处理所有的配置类
      • 4.3.2 注解@ComponentScan
      • 4.3.3 注解@Import
      • 4.3.4 SpringBoot加载配置类总结
  • 5. SpringBoot自动配置的原理剖析
    • 5.1 如何实现类AutoConfigurationImportSelector
    • 5.2 注解@Conditional
  • 6. SpringBoot自动配置实例 - Redis
  • 7. 总结
  • 8. 目前未涉及的一些知识点

1. SpringBoot自动配置的定义

英文是Auto-Configuration

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

2. 术语"配置类”

2.1 定义

英文Configuration Class

  1. 广义的“配置类”:被注解@Component直接或间接修饰的某个类,即我们常说的Spring组件,其中包括了@Configuration类。

  2. 狭义的“配置类”:特指被注解@Configuration所修饰的某个类,又称为@Configuration类。

2.2 示例

SpringBoot的自动配置_第1张图片
SpringBoot的自动配置_第2张图片

3. SpringBoot自动配置的实例

实例:Redis的自动配置
SpringBoot的自动配置_第3张图片SpringBoot的自动配置_第4张图片
SpringBoot的自动配置_第5张图片

4. SpringBoot的启动流程

4.1 简化版代码

SpringBoot的自动配置_第6张图片

4.2 图形示例

SpringBoot的自动配置_第7张图片

4.3 SpringBoot加载配置类的流程

4.3.1 加载并处理所有的配置类

SpringBoot的自动配置_第8张图片
SpringBoot的自动配置_第9张图片
SpringBoot的自动配置_第10张图片

4.3.2 注解@ComponentScan

SpringBoot的自动配置_第11张图片SpringBoot的自动配置_第12张图片

4.3.3 注解@Import

SpringBoot的自动配置_第13张图片
示例一:注解@Import导入普通类
SpringBoot的自动配置_第14张图片
SpringBoot的自动配置_第15张图片
SpringBoot的自动配置_第16张图片
示例二:注解@Import导入接口ImportSelector实现类
SpringBoot的自动配置_第17张图片
SpringBoot的自动配置_第18张图片
SpringBoot的自动配置_第19张图片
SpringBoot的自动配置_第20张图片
SpringBoot的自动配置_第21张图片
示例三:导入接口ImportBeanDefinitionRegistrar实现类
SpringBoot的自动配置_第22张图片
SpringBoot的自动配置_第23张图片
SpringBoot的自动配置_第24张图片
SpringBoot的自动配置_第25张图片
SpringBoot的自动配置_第26张图片

4.3.4 SpringBoot加载配置类总结

SpringBoot的自动配置_第27张图片

5. SpringBoot自动配置的原理剖析

SpringBoot的自动配置_第28张图片

5.1 如何实现类AutoConfigurationImportSelector

SpringFactories机制

  1. Java SPI机制的延伸和扩展
  2. Spring框架的基础机制,在Spring以及SpringBoot源码中到处可见
  3. 可以基于它来实现SpringBoot的自动配置功能

SpringFactories机制
它的核心逻辑是从classpath中读取到所有Jar包中的配置文件META-IF/spring.factories, 然后根据指定的key从配置文件中解析出对应的值。

SpringBoot的自动配置_第29张图片
SpringBoot的自动配置_第30张图片
其中getAutoConfigurationEntry是自动配置的入口。整个逻辑也不复杂,总共是5步:
SpringBoot的自动配置_第31张图片
我们再着重看一下方法getCandidateConfigurations,这是基于SpringFactories机制来获取第三方Jar包中所有自动配置类的方法,注意到从配置文件获取自动配置类时,使用的类是类EnableAutoConfiguration的全限定名。
SpringBoot的自动配置_第32张图片
代码看起来不太直观,我们使用一个动画来总结一下AutoConfigurationSelector的实现流程:
SpringBoot的自动配置_第33张图片

5.2 注解@Conditional

@Conditional,是来自Spring框架的一个注解:

  1. 它的作用是实现:只有在特定条件满足时,才会向IoC容器注册指定的组件。
  2. 我们可以将@Conditional理解为某种IF语句。
    SpringBoot的自动配置_第34张图片

6. SpringBoot自动配置实例 - Redis

SpringBoot的自动配置_第35张图片
SpringBoot的自动配置_第36张图片
SpringBoot的自动配置_第37张图片
SpringBoot的自动配置_第38张图片
SpringBoot的自动配置_第39张图片SpringBoot的自动配置_第40张图片

7. 总结

SpringBoot的自动配置_第41张图片

8. 目前未涉及的一些知识点

SpringBoot的自动配置_第42张图片

参考资料:B站目前讲的最透彻的SpringBoot自动配置,大厂面试必备知识点

你可能感兴趣的:(SpringBoot,spring,boot,spring,java)