一、概述
SpringBoot整合Tomcat整体启动流程如下图,接下来我们就按照改流程分析SpringBoot中内嵌Tomcat的启动流程。
二、启动流程
通过AbstractApplicationContext.refresh方法进入AbstractApplicationContext.onRefresh方法。
之后进入子类ServletWebServerApplicationContext.onRefresh方法
进入子类ServletWebServerApplicationContext.createWebServer方法
通过 ServletWebServerApplicationContext.getWebServerFactory拿到工厂类。
通过this.webServer = factory.getWebServer(getSelfInitializer());这行代码进入TomcatServletWebServerFactory.getWebServer方法,并获取实例化的tomcat。
之后进入TomcatServletWebServerFactory.getTomcatWebServer方法。
TomcatWebServer构造器内调用TomcatWebServer.initialize方法
TomcatWebServer.initialize方法中this.tomcat.start();进入下一步。
server.start();进入下一步。
因为server是新建的因此会走init方法。
最后进入实现类的StandardServer.initInternal方法,在该方法的最后一行进行了service的初始化,SpringBoot就是这样不断通过生命周期,完成Tomcat的初始化的。