这样看发现我们的启动类实际是被这些注解标识:
@Configuration
@Import(AutoConfigurationImportSelector.class)
@Import(AutoConfigurationPackages.Registrar.class)
@ComponentScan
我们按我们上面步骤的第三步来对TomcatWarApplication.class这个配置类进行解析:
1、@ComponentScan满足第三个条件,如果@ComponentScan注解没有显示设置的属性,那么就扫描TomcatWarApplication所在包路径(com.sourcecode.springboot.tomcatwar)下的class,如果满足条件(比如注解了@Configuration或@Service等)就会将这些class作为一个配置类,然后进行同样的解析
2、@Import(AutoConfigurationImportSelector.class),这个Selector是ImportSelector类型且是DeferredImportSelector类型,那么就将AutoConfigurationImportSelector中的selectImports方法返回的类作为配置类进行同样解析,该方法使用SPI的方式从jar中的META-INF/spring.factories文件中获取指定属性的值(也就是对应类的全路径名称为属性名),然后将这些类作为配置类进行同样的解析,一些starter的定义就是使用这种方式(比如Druid数据源的starter),如下所示:

文章插图
SPI

文章插图
自动配置

文章插图
druid数据源的starter
3、@Import(AutoConfigurationPackages.Registrar.class),该Registrar是ImportSelector类型但不是延迟导入类型,so调用该类的registerBeanDefinitions方法进行注册BeanDefinition,比如Mybatis的注解@MapperScan:

文章插图
@MapperScan注解
再来看@Import中的MapperScannerRegistrar,最终通过registerBeanDefinitions方法来对我们定义的Mapper/Dao进行扫描并注册BeanDefinition到BeanFactory中

文章插图
MapperScannerRegistrar
【Springboot——自动配置原理】通过对Springboot自动配置的的分析,我们就可以定义我们自己组件的starter了~~~
再次回顾下配置类的解析流程图吧:

文章插图
配置类解析流程图
觉得可以的话点个关注,加个收藏呗,陆续奉上干货~~~~
推荐阅读
- springboot创建mymes
- CENTOS Mysql5.7数据库自动安装脚本
- wps word引用excel数据并自动更新?wps表格粘贴到word怎样保持它不变
- 自动驾驶|自动驾驶出租车要来了 小马智行官宣:你敢坐吗?
- 自动驾驶|通用新技术专利曝光:自动驾驶车取代驾校教练
- CENTOS自动巡检服务器性能指标
- redis哨兵docker部署及springboot运行
- 自动回复个性句有哪些?
- SpringBoot实现QQ邮箱注册和登录
- 如何实现几百台SIP终端实现自动化部署
