SpringBoot源码2.2.5
2022-07-11 16:01:37 25 举报
SpringBoot源码启动流程分析2.2.5
作者其他创作
大纲/内容
getAutoConfigurationEntry
ConfigurationClassPostProcessor↓DeferredImportSelector↓AutoConfigurationImportSelector↓process↓getAutoConfigurationEntry(SPI)
添加一个BFPPLazyInitializationBeanFactoryPostProcessor
prepareContext上下文刷新前准备
Context
getTomcatWebServer
processConfigurationClass
Engine
getService
deferredImportSelectorHandler.process自动装配操作入口
context.setEnvironment设置上下文环境对象
ApplicationRunner
......其它的主要就是Spring代码
this.tomcat.start()启动Tomcat并触发初始化监听器
解析启动args参数
this.group.selectImports遍历得到的类,又开始Import注解处理流程
AnnotationConfigServletWebServerApplicationContext
getEngine创建Engine
ConfigFileApplicationListener配置文件加载监听器
Host
callRunners执行程序启动完成后的方法
CommandLineRunner
initialize
SpringApplication对象实例化时通过SPI获取的所有初始化器
refreshContext上下文具体的刷新
ApplicationStartingEvent
applyInitializers执行所有初始化器的初始化方法
prepareEnvironment准备环境对象
添加到deferredImportSelectors集合中
setListenersSPI获取监听器并设置到SpringApplication对象
listeners.contextPrepared发布上下文刷新前时间
注入了TomcatServletWebServerFactory对象
postProcessApplicationContext执行上下文后置处理器方法
设置bean定义是否允许覆盖
createApplicationContext反射创建上下文对象
springBoot框架对Tomcat进行了二次封装,将Tomcat需要用到的组件都创建好,然后调用了生命周期的start方法,这样和我们自己下载一个Tomcat启动没区别啦
getCandidateConfigurationsSPI获取EnableAutoConfiguration所有实现类
new Connector()
ImportBeanDefinitionRegistrar
ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistryBDRPP的方法
Main方法启动
Service
prepareContext准备Context对象
parser.parse
this.reader.loadBeanDefinitions(configClasses)加载configurationClasses到工厂定义信息中
WebApplicationType.deduceFromClasspath推断出应用类型
Connector
handler.processGroupImports
setInitializersSPI获取初始化器并设置到SpringApplication对象
createWebServer创建Web容器
getSelfInitializer
getRunListeners(args)spi获取事件发布器
getWebServer获取Web容器
Server
grouping.getImports()
调到Spring的AbstractApplicationContext#refresh
Tomcat组件层级结构
listeners.started发布容器启动事件
onRefresh启动了Web容器
afterRefresh刷新后操作(模板方法留给子类实现)
doProcessConfigurationClass循环调解析各个注解,解析完会加到configurationClasses中,自动装配的类都会被加到这里
listeners.contextLoaded发布上下文加载完成事件
自动装配导入
ApplicationEnvironmentPreparedEvent
ApplicationPreparedEvent
this.group.process
getOrCreateEnvironment创建环境对象(StandardServletEnvironment)
run(args)run方法启动
getWebServerFactory获取Web容器工厂对象
Import了EmbeddedTomcat对象
ImportSelector和DeferredImportSelector区别:DeferredImportSelector设计的目的是在所有其他的配置类被处理后才进行处理
new Tomcat()
设置资源加载器
LifecycleBase#startTomcat生命周期启动方法
new SpringApplication(启动类)初始化
发布程序启动事件
ImportSelector
ApplicationContextInitializedEvent
ApplicationReadyEvent
AutoConfigurationImportSelector
设置类型转换服务
processImports解析@Import
printBanner打印Banner图
ApplicationStartedEvent
自动装配Web容器相关对象
filter过滤不符合导入条件的类
ServletWebServerFactoryAutoConfiguration
removeDuplicates、getExclusions移除重复的类和排除的类
设置beanName生成器
loadPostProcessorsSPI获取所有的EnvironmentPostProcessor
待完善,依赖springbean扫描的过程很复杂,后续会画一个解析过程
EventPublishingRunListener
SPI获取异常报告器
listeners.environmentPrepared发布环境准备事件
invokeBeanFactoryPostProcessors自动装配在这个方法中实现
findContext
getHost
listeners.running发布容器启动完成事件
最后得到的类包装成Entry集合中
收藏
收藏
0 条评论
下一页