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
因篇幅问题不能全部显示,请点此查看更多更全内容