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 自动配置类

  1. 自动配置原理:
    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

posted @ 2022-02-04 14:14  悠然采  阅读(2173)  评论(0编辑  收藏  举报