Springboot核心:自动配置原理

发布于 2023-09-26  1262 次阅读


应用关注的三大核心:场景、配置、组件

自动配置流程

  1. 导入starter
  2. 依赖导入autoconfigure
  3. 寻找类路径下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件
  4. 启动,加载所有 自动配置类 xxxAutoConfiguration
    a 给容器中配置功能组件
    b 组件参数绑定到 属性类中。xxxProperties
    c 属性类和配置文件前缀项绑定
    d @Contional派生的条件注解进行判断是否组件生效
  5. 效果:
    a 修改配置文件,修改底层参数
    b 所有场景自动配置好直接使用
    c 可以注入SpringBoot配置好的组件随时使用

进阶理解

@SpringBootApplication

@SpringBootConfiguration
就是: @Configuration ,容器中的组件,配置类。spring ioc启动就会加载创建这个类对象

@EnableAutoConfiguration:开启自动配置
开启自动配置


@AutoConfigurationPackage:扫描主程序包:加载自己的组件
●利用 @Import(AutoConfigurationPackages.Registrar.class) 想要给容器中导入组件。
●把主程序所在的包的所有组件导入进来。
为什么SpringBoot默认只扫描主程序所在的包及其子包

@Import(AutoConfigurationImportSelector.class):加载所有自动配置类:加载starter导入的组件

List<String> configurations = ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader())
			.getCandidates();

扫描SPI文件:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@ComponentScan

组件扫描:排除一些组件(哪些不要)
排除前面已经扫描进来的配置类、和自动配置类。

@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
      @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })


欢迎欢迎~热烈欢迎~