@SpringBootApplication 原理及核心源码解读
2022-04-24 01:12:59 0 举报
@SpringBootApplication是Spring Boot的核心注解,它实际上是一个组合注解,包含了@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解。其中,@Configuration表示这是一个配置类,@EnableAutoConfiguration表示开启自动配置功能,@ComponentScan表示扫描当前包及其子包下的所有组件。当使用@SpringBootApplication注解一个主类时,就相当于在启动类中同时添加了这三个注解的功能。这样,我们只需要编写一个简单的主类,就可以实现项目的快速搭建和运行。
作者其他创作
大纲/内容
@SpringBootConfiguration
解读: @SpringBootConfiguration : SpringBoot 的配置类,标注在某个类上,表示这是一个 SpringBoot
的配置类。
的配置类。
@EnableAutoConfiguration
@AutoConfigurationPackage
核心:@Import(AutoConfigurationPackages.Registrar.class)
解读:AutoConfigurationPackages.Registrar这个类就干一个事,注册一个 Bean ,这个 Bean 就是
org.springframework.boot.autoconfigure.AutoConfigurationPackages.BasePackages ,它有
一个参数,这个参数是使用了 @AutoConfigurationPackage 这个注解的类所在的包路径
org.springframework.boot.autoconfigure.AutoConfigurationPackages.BasePackages ,它有
一个参数,这个参数是使用了 @AutoConfigurationPackage 这个注解的类所在的包路径
Registrar 类中 registerBeanDefinitions 方法
Registrar 类中 register方法
@Import(AutoConfigurationImportSelector.class)
解读:AutoConfigurationImportSelector 可以帮助 Springboot 应用将所有符合条件的 @Configuration
配置都加载到当前 SpringBoot 创建并使用的 IOC 容器( ApplicationContext )中。重点是实现了 DeferredImportSelector 接口
配置都加载到当前 SpringBoot 创建并使用的 IOC 容器( ApplicationContext )中。重点是实现了 DeferredImportSelector 接口
自动配置部分源码解读
入口:DeferredImportSelectorGrouping getImports方法
解读【1】:this.group.process 主要做的事情就是在 this.group 即
AutoConfigurationGroup 对象的 process 方法中,传入的 AutoConfigurationImportSelector
对象来选择一些符合条件的自动配置类,过滤掉一些不符合条件的自动配置类
AutoConfigurationGroup 对象的 process 方法中,传入的 AutoConfigurationImportSelector
对象来选择一些符合条件的自动配置类,过滤掉一些不符合条件的自动配置类
解读【2】:this.group.selectImports的方法主要是针对前面的process方法处理后的自动配置类再进一
步有选择的选择导入
步有选择的选择导入
核心逻辑 :AutoConfigurationGroup process方法
【1】AutoConfigurationGroup getAutoConfigurationEntry 方法
解读【1】从 spring.factories 配置文件中加载 EnableAutoConfiguration 自动配置类)
解读【2】 若 @EnableAutoConfiguration 等注解标有要 exclude 的自动配置类,那么再将这个自动配置类
排除掉;
排除掉;
解读 【3】排除掉要 exclude 的自动配置类后,然后再用 AutoConfigurationImportFilter 接口去过滤自动配置类是否符合其标注注解(若有
标注的话) @ConditionalOnClass , @ConditionalOnBean 和
@ConditionalOnWebApplication 的条件,若都符合的话则返回匹配结果;
标注的话) @ConditionalOnClass , @ConditionalOnBean 和
@ConditionalOnWebApplication 的条件,若都符合的话则返回匹配结果;
解读【4】经过重重过滤后,此时再触发 AutoConfigurationImportEvent 事件,告诉
ConditionEvaluationReport 条件评估报告器对象来记录符合条件的自动配置类;
ConditionEvaluationReport 条件评估报告器对象来记录符合条件的自动配置类;
解读【5】最后spring再将最后筛选后的自动配置类导入IOC容器中
SpringBoot自动配置模块
@ComponentScan
解读:主要是从定义的扫描路径中,找出标识了需要装配的类自动装配到spring 的bean容器中。
常用属性
basePackages、value:指定扫描路径
basePackageClasses:指定具体扫描的类
excludeFilters:指定排除Filter条件的类
includeFilters:指定满足Filter条件的类
收藏
收藏
0 条评论
下一页