springboot2.2.x源码分析
2020-04-09 17:45:55 145 举报
Sprint-Boot-2.2.x源码分析
作者其他创作
大纲/内容
获取监听器SpringApplicationgetRunListeners()
ConfigurationClassParser.DeferredImportSelectorGroupingHandlerprocessGroupImports
执行监听器启动方法SpringApplicationlisteners.starting()
执行监听器上下文加载方法SpringApplicationlisteners.contextLoaded()
ConfigurationClassParser.DeferredImportSelectorHandlerprocess
过滤掉重复配置的自动配置类以及配置在exclude和excludeName中的类
ConfigurationClassParser.DeferredImportSelectorGroupinggetImports
AutoConfigurationImportSelector.AutoConfigurationGroupprocess
ConfigurationClassPostProcessor processConfigBeanDefinitions
获取META-INF/spring.factories下所有的自动配置类AutoConfigurationImportSelectorgetCandidateConfigurations
每个线程获取@OnClassConditional中配置的类,并使用ClassLoader.loadClass()或者Class.forName()尝试加载,如果加载不了则不满足条件,否则满足条件
Springboot启动流程
执行过滤filter.match()
三个注解循环遍历,任何一个条件不满足则不会自动配置以@OnClassConditional为例执行getOutcomes()刷选
反射创建容器AnnotationConfigServletWebServerApplicationContext
执行监听器上下文已运行方法SpringApplicationlisteners.started()
执行监听器准备环境方法SpringApplicationlisteners.environmentPrepared()
AnnotationConfigServletWebServerApplicationContext在初始化时注入ConfigurationClassPostProcessor此类是自动配置的入口
springr容器刷新SpringApplicationrefreshContext()
启动SpringApplicationrun()
SpringBoot自动配置流程
ConfigurationClassParserparse
创建IOC容器SpringApplicationcreateApplicationContext()
准备上线文SpringApplicationprepareContext()
AutoConfigurationImportSelectorgetAutoConfigurationEntry
注入启动类SpringApplicationload()
打印bannerSpringApplicationprintBanner()
容器刷新时执行ConfigurationClassPostProcessor postProcessBeanDefinitionRegistry
扩展模版方法SpringApplicationafterRefresh()
准备环境SpringApplicationprepareEnvironment()
基于ApplicationRunner和CommandLineRunner接口的扩展callRunners()
执行监听器上下文已启动方法SpringApplicationlisteners.started()
过滤掉不符合条件的自动配置类
设置需要忽略的beanSpringApplicationconfigureIgnoreBeanInfo()
执行初始化器applyInitializersinitialize()
执行监听器上下文准备方法SpringApplicationlisteners.contextPrepared()
获取过滤条件,默认有三个条件@OnBeanConditional、@OnClassConditional、@OnWebApplicationConditionalgetAutoConfigurationImportFilters()
处理器大于1个时用两个线程处理每个线程处理一半,处理完后合并resolveOutcomesThreaded()
0 条评论
回复 删除
下一页