SpringBoot的自动配置

这里写目录标题

  • 1. 什么是SpringBoot的自动配置
    • 1.1 广义的配置类
    • 1.2 狭义的配置类
  • 2. 举个例子:Redis的自动配置
    • 2.1 引入依赖
    • 2.2 配置redis服务连接信息
    • 2.3 直接使用RedisTemplate
  • 3.
    • 3.1 SpringBoot启动流程(简化版)
    • 3.2 加载并配置所有配置类
    • 3.3 SpringBoot加载配置的流程(简化)
      • 涉及到两个注解@ComponScan @Import
      • @ComponentScan
      • @Import
        • 支持三种导入方式
        • 导入普通类
        • 注解@Import 导入一个接口ImportSelector实现类
        • 导入接口ImportBeanDefinitionRegistrar实现类
  • 4. SpringBoot自动装配原理分析
    • 4.1 一切从注解`@SpringBootApplication`说起。
    • @SpringBootApplication注解拆分后看到核心注解`@Import(AutoConfigurationImportSelector.class)`
    • SpringFactories机制
    • AutoConfigurationImportSelector关键源码
      • selectImports()
      • getAutoConfigurationEntry() 自动配置方法入口
      • getCandidataConfigurations() 通过SpringFatories机制,从配置文件 spring.factories 中找到所有自动配置类,key是EnableAutoConfiguration的全限定名
      • 总结一下AutoConfigurationImportSelector实现流程
        • @Conditional
  • 5. 总结
    • 5.1 SpringBoot自动配置--redis
      • Spring-boot-autoconfigure项目查看配置文件和源码

1. 什么是SpringBoot的自动配置

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

1.1 广义的配置类

@Component修饰的类
SpringBoot的自动配置_第1张图片

1.2 狭义的配置类

@Configuration修饰的类
SpringBoot的自动配置_第2张图片

2. 举个例子:Redis的自动配置

2.1 引入依赖

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

2.2 配置redis服务连接信息

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

2.3 直接使用RedisTemplate

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

3.

3.1 SpringBoot启动流程(简化版)

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

3.2 加载并配置所有配置类

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

3.3 SpringBoot加载配置的流程(简化)

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

涉及到两个注解@ComponScan @Import

@ComponentScan

他的作用是对指定的package进行扫描,找到符合条件的类,默认是搜索被注解@Component修饰的配置类
如果未指定package,则默认扫描当前@ComponScan所修饰的类所在的package

@ComponScan示例
SpringBoot的自动配置_第11张图片

@Import

他的作用是提供了一种显示的从其他地方加载配置类的方式,这样可以避免使用性能比较差的组件扫描Compon Scan
这里的”其他地方“,通常指第三方的jar包

支持三种导入方式

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

导入普通类

SpringBoot的自动配置_第13张图片
SpringBoot的自动配置_第14张图片
SpringBoot的自动配置_第15张图片

注解@Import 导入一个接口ImportSelector实现类

SpringBoot的自动配置_第16张图片
SpringBoot的自动配置_第17张图片
SpringBoot的自动配置_第18张图片
SpringBoot的自动配置_第19张图片
SpringBoot的自动配置_第20张图片

导入接口ImportBeanDefinitionRegistrar实现类

SpringBoot的自动配置_第21张图片
SpringBoot的自动配置_第22张图片
SpringBoot的自动配置_第23张图片

SpringBoot的自动配置_第24张图片
SpringBoot的自动配置_第25张图片

4. SpringBoot自动装配原理分析

4.1 一切从注解@SpringBootApplication说起。

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

@SpringBootApplication注解拆分后看到核心注解@Import(AutoConfigurationImportSelector.class)

SpringBoot的自动配置_第28张图片
如何实现类AutoConfigurationImportSelector,答案是利用SpringFactories机制(Java SPI机制的延伸和扩展)

SpringFactories机制

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

AutoConfigurationImportSelector关键源码

selectImports()

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

getAutoConfigurationEntry() 自动配置方法入口

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

getCandidataConfigurations() 通过SpringFatories机制,从配置文件 spring.factories 中找到所有自动配置类,key是EnableAutoConfiguration的全限定名

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

总结一下AutoConfigurationImportSelector实现流程

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

@Conditional

当满足特定条件时,才向IOC容器注册。
常用的Conditional扩展注解如下:
SpringBoot的自动配置_第34张图片

5. 总结

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

5.1 SpringBoot自动配置–redis

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

Spring-boot-autoconfigure项目查看配置文件和源码

SpringBoot的自动配置_第37张图片
查找其中配置类之一:RedisAutoConfiguration
SpringBoot的自动配置_第38张图片

视频来源:https://www.bilibili.com/video/BV1NY411P7VX/?spm_id_from=333.788&vd_source=b901ef0e9ed712b24882863596eab0ca

你可能感兴趣的:(面试题-框架,spring,boot,java,redis)