标签:mpp pex sockets gcs sea 执行 依次 stp 如何
PartA: ServletWebServerFactory factory = getWebServerFactory();
首先获取到beanName是tomcatServletWebServerFactory:
然后调用开始调用AbstractBeanFactory#doGetBean开始创建bean,你又会看到熟悉的代码:
在AbstractAutowireCapableBeanFactory#createBean方法中会调用doCreateBean,接着留意createBeanInstance这个方法:
在createBeanInstance这个方法里,留意instantiateUsingFactoryMethod,会根据ServletWebServerFactoryConfiguration$Embedded这个factorybean name创建一个factoryBean. factoryBean = this.beanFactory.getBean(factoryBeanName);实际上又是去执行创建bean的流程
然后会通过SimpleInstantiationStrategy#instantiate调用ServletWebServerFactoryConfiguration#tomcatServletWebServerFactory创建tomcatServletWebServerFactory
接下来关注initializeBean,这里会执行几个重要的beanPostProcessors
WebServerFactoryCustomizerBeanPostProcessor#postProcessBeforeInitialization,会遍历beanDefinition找到相关的bean,并实例化相关的5个bean
最终返回5个customizers:
然后会依次执行这5个customizers的customize方法
TomcatWebSocketServletWebServerCustomizer:暂不分析
ServletWebServerFactoryCustomizer:
上面这个方法会调用ServletWebServerFactoryAutoConfiguration#servletWebServerFactoryCustomizer方法创建ServletWebServerFactoryCustomizer
TomcatServletWebServerFactoryCustomizer:暂不分析
TomcatWebServerFactoryCustomizer:暂不分析
ServletWebServerFactoryAutoConfiguration是核心配置类,PartA的总体任务是根据配置创建ServletWebServerFactory及其相关的bean.
PartB: this.webServer = factory.getWebServer(getSelfInitializer());
getSelfInitializer主要会注册所有的 servlet 组件 (包括 Servlet,Filter,Listener)
getWebServer主要是创建了Tomcat对象,并设置tomcat的相关配置,
紧接着调用getTomcatWebServer会启动tomcat:
tomcat启动后会启动守护线程,防止tomcat停止,也是SpringBoot run方法后不会结束的原因。
更多了解请关注一米源码公众号并回复SpringBoot或https://itproject-manager.com/
标签:mpp pex sockets gcs sea 执行 依次 stp 如何
原文地址:https://www.cnblogs.com/jovic/p/14617776.html