spring boot webflux 部分关键启动过程

spring boot webflux 部分关键启动过程_第1张图片
image.png

new SpringApplication()

  记录primarySources

  判定webApplicationType(具体流程可参考相关流程图)

规则:
有引入spring MVC框架或者jersey框架则返回WebApplicationType.SERVLET。
存在Org.springframework.web.reactive.DispatcherHandler类则返回WebApplicationType.REACTIVE。
不存在javax.servlet.Servlet或org.springframework.web.context.ConfigurableWebApplicationContext则返回NONE
其他则默认SERVLET

  设置initializers

SpringFactoriesLoader负责加载spring.factories配置;该处将返回org.springframework.context.ApplicationContextInitializer的所有bean实例

  设置ApplicationListener相关的所有listener

spring.factories中设置的org.springframework.context.ApplicationListener的所有bean实例

获取SpringApplicationRunListeners相关的listener

spring.factories中设置的org.springframework.boot.SpringApplicationRunListener相关的所有bean实例。其中有一个EventPublishingRunListener类型的bean,在初始化时,会将上一步的ApplicationListener类型的listerners全部注册起来。

prepareEnvironment

springboot在此之前将从bean工厂中获取SpringApplicationRunListner类型的bean,然后封装程SpringApplicationRunListners对象传入此方法。而该方法主要负责遍历调用各个监听器的environmentPrepared方法

configureIngoreBeanInfo

设置spring.beaninfo.ignore,用途暂未知

createApplicationContext

如果WebApplicationType是SERVLET则使用org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
如果是REACTIVE,则使用org.springframework.boot.web.servlet.context.AnnotationConfigReactiveWebServerApplicationContext

prepareContext

给context设置environment ....
将context传给所有initializer初始化一遍
将context传给所有应用监听器prepareContext一遍
创建启动类对应的bean
遍历各监听器的contextLoaded方法

refreshContext

AnnotationConfigReactiveWebServerApplicationContext.refresh

prepareRefresh()

prepareBeanFactory(beanFactory):


后续将使用到Detector

postProcessBeanFactory(beanFactory)
invokeBeanFactoryPostProcessors(beanFactory) 读出入口应用所在包下的所有注解bean类,初始化bean
registerBeanPostProcessors(beanFactory)

onRefresh()-->创建webserver。并调用WebServerFactoryCustomizer相关bean(由EmbededWebServerFactoryCustomizerAutoConfigureation等配置类创建)进行个性化设置。

registerListeners()

finishBeanFactoryInitialization(beanFactory)-->触发注册用户自定义的监听器(ApplicationListenerDetector.postProcessAfterInitialization(bean, beanName))

finishRefresh()

你可能感兴趣的:(spring boot webflux 部分关键启动过程)