码迷,mamicode.com
首页 > 其他好文 > 详细

内嵌的tomcat是如何创建的

时间:2021-04-06 15:13:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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/

内嵌的tomcat是如何创建的

标签:mpp   pex   sockets   gcs   sea   执行   依次   stp   如何   

原文地址:https://www.cnblogs.com/jovic/p/14617776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!