SpringBoot源码分析:SpringBoot整合Tomcat(三)

一、概述

SpringBoot整合Tomcat整体启动流程如下图,接下来我们就按照改流程分析SpringBoot中内嵌Tomcat的启动流程。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第1张图片

二、启动流程

通过AbstractApplicationContext.refresh方法进入AbstractApplicationContext.onRefresh方法。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第2张图片

 之后进入子类ServletWebServerApplicationContext.onRefresh方法

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第3张图片

 进入子类ServletWebServerApplicationContext.createWebServer方法

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第4张图片

通过 ServletWebServerApplicationContext.getWebServerFactory拿到工厂类。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第5张图片

 通过this.webServer = factory.getWebServer(getSelfInitializer());这行代码进入TomcatServletWebServerFactory.getWebServer方法,并获取实例化的tomcat。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第6张图片

 之后进入TomcatServletWebServerFactory.getTomcatWebServer方法。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第7张图片

 TomcatWebServer构造器内调用TomcatWebServer.initialize方法 

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第8张图片

TomcatWebServer.initialize方法中this.tomcat.start();进入下一步。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第9张图片

 server.start();进入下一步。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第10张图片

 因为server是新建的因此会走init方法。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第11张图片

最后进入实现类的StandardServer.initInternal方法,在该方法的最后一行进行了service的初始化,SpringBoot就是这样不断通过生命周期,完成Tomcat的初始化的。

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第12张图片

SpringBoot源码分析:SpringBoot整合Tomcat(三)_第13张图片

你可能感兴趣的:(Spring,spring,boot,java,spring)