springboot 加载 tomcat 源码追踪
加载 TomcatServletWebServerFactory
从 SpringApplication.run()方法进入
进入到 refresh () 方法
选择实现类 ServletWebServerApplicationContext
进入到 AbstractApplicationContext
onRefresh() 方法创建容器
找到加载bean
得到 webServer 实例
点击 getWebServer()
其实现类
如何知到是哪个实现类呢?接着往下看
自动装配 TomcatServletWebServerFactory
在 spring-boot-autoconfigure 包下找到 spring-autoconfigure-metadata.properties 文件
搜索 javax.servlet.ServletRequest 找到
ServletWebServerFactoryAutoConfiguration
核心就在 org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration
这个配置类中
点击 EmbeddedTomcat.class 进入 ServletWebServerFactoryConfiguration
该类根据项目中是否含有指定的类来加载对应的容器,并创建 ServletWebServerFactory
tomcat
jetty
Undertow
当 摁下 ctrl 可以跳转,则整明该项目下有这个类,
根据 @ConditionalOnClass 注解 则可以加载 EmbeddedTomcat
否则不能加载
项目因引入该依赖,从而引入了 tomcat 容器
至此, TomcatServletWebServerFactory 随着项目启动加载到了 spring 管理的 bean 当中
上文便可以获取到该工厂,初始化 tomcat 容器。