内嵌的tomcat是如何创建的
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/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)