SpringBoot 启动自动扫描配置原理
SpringBoot 自带的自动配置原理
一 启动类自动扫包范围注解
@SpringBootApplication \ @EnableAutoConfiguration \ @ComponentScan
1.@EnableAutoConfiguration:扫包范围默认当前类。
2.@ComponentScan(" ") 扫包范围默认当前类所在的整个包下面所有类。
扫包范围大于@EnableAutoConfiguration,@ComponentScan(" ")依赖于@EnableAutoConfiguration启动程序。
@EnableAutoConfiguration
@ComponentScan("第三方包 ")
app.run()
4.@SpringBootApplication 扫包范围同级包和当前包。
@SpringBootApplication 底层等同于@EnableAutoConfiguration+@ComponentScan。不扫描第三方包
例子:
@SpringBootApplication
@ComponentScan("第三方包 ")
app.run()
SpringBoot 自动配置类
-
自动配置原理:
a SpringBoot 启动的时候自动加载主配置类,开启自动配置功能 @EnableAutoConfiguration
b @EnableAutoConfiguration作用:@EnableAutoConfiguration 简单概括一下就是,借助@Import的支持,收集和注册特定场景相关的bean定义。 @EnableScheduling是通过@Import将Spring调度框架相关的bean定义都加载到IoC容器。 @EnableMBeanExport是通过@Import将JMX相关的bean定义加载到IoC容器。 而@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器 ![](https://img2022.cnblogs.com/blog/1823155/202203/1823155-20220305201600222-1021504445.png) 最关键的要属@Import(AutoConfigurationImportSelector.class), 利用AutoConfigurationImportSelector给容器导入一些组件 可以查看selectImports()方法的内容; List configurations = getCabdidateConfigurations(annotationMetadata, attributes)获取候选的配置 SpringFactoriesLoader.loadFactoryNames() 扫描所有jar 包类路径下, META-INF/spring.factories 把扫描到的这些文件的内容包装成properties 对象 从properties获取到的EnableAutoConfiguration.class 类(类名)对应的值,然后把他们添加在容器中 将类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到容器中
org.springframework.boot.autoconfigure.EnableAutoConfiguration:
org.springframework.boot.autoconfigure.xxx