您的当前位置:首页正文

springboot启动流程

2020-11-20 来源:尚车旅游网
springboot启动流程

SpringApplication⽣命周期

1.获取SpringApplicationRunListener

>通过SPI机制加载SpringApplicationRunListener实现类,定义在META-INF/spring.factories# Run Listeners

org.springframework.boot.SpringApplicationRunListener=\\

org.springframework.boot.context.event.EventPublishingRunListener

2.遍历所有的SpringApplicationRunListener并调⽤starting()⽅法

默认EventPublishingRunListener发布ApplicationStartingEvent事件3.将JVM启动参数封装为ApplicationArguments4.准备environment抽象

创建environment

SERVLET : StandardServletEnvironmentREACTIVE:StandardReactiveWebEnvironmentdefault:StandardEnvironment

配置Environment

增加conversionService添加命令参数配置profile

发布ApplicationEnvironmentPreparedEvent

ConfigFileApplicationListener#onApplicationEnvironmentPreparedEvent -->EnvironmentPostProcessor#postProcessEnvironment

5.实例化ApplicationContext

web应⽤类型推断

传统web容器servlet:AnnotationConfigServletWebServerApplicationContext基于netty的reactive:AnnotationConfigReactiveWebServerApplicationContext⾮web应⽤default:AnnotationConfigApplicationContext6.准备应⽤上下⽂

设置enviroment

对应⽤上下⽂的前置处理

⾃定义beanName⽣成器<默认⽆>⾃定义资源加载器<默认⽆>添加类型转换器ConversionService

ApplicationContextInitializer:在容器refresh()之前初始化容器,通常⽤于注册Property sources发布ApplicationContextInitializedEvent事件向容器注册ApplicationArguments单例bean

设置beanDefinition是否可以覆盖,这⾥会设置为false,低版本的springboot未做设置

加载配置源,默认由@SpringApplication标注的类,需要注意的是配置源是可以存在多份的向容器注册配置源类的beanDefinition发布ApplicationPreparedEvent事件refresh容器

容器启动完成后,发布ApplicationStartedEvent事件总结

Springboot通过在容器真正启动前,提前对容器的⾏为做出相应的调整。并⾃定义了Spring应⽤上下⽂事件SpringApplicationEvent

因篇幅问题不能全部显示,请点此查看更多更全内容