SpringBoot初始化过程源码解析(八)服务器启动

onRefresh为自定义类提供了一个扩展接口,同时也创建了web服务器(如果有的话)SpringBoot初始化过程源码解析(八)服务器启动_第1张图片
大致流程:

	private void createWebServer() {
		WebServer webServer = this.webServer;
		ServletContext servletContext = getServletContext();
		if (webServer == null && servletContext == null) {
		//1、用工厂模式创建服务器
			ServletWebServerFactory factory = getWebServerFactory();
			this.webServer = factory.getWebServer(getSelfInitializer());
		}
		else if (servletContext != null) {
			try {
				getSelfInitializer().onStartup(servletContext);
			}
			catch (ServletException ex) {
				throw new ApplicationContextException("Cannot initialize servlet context", ex);
			}
		}
		//2、属性初始化
		initPropertySources();
	}

当factory在 getWebServer的时候,传入了一个ServletContextInitializer,这个servlet环境启动器将会注册servlet和filter相关信息:
SpringBoot初始化过程源码解析(八)服务器启动_第2张图片
进入到onStartup,深入一下,这里实现方法分别是用来注册filter和servlet:
在这里插入图片描述
SpringBoot初始化过程源码解析(八)服务器启动_第3张图片
在这里插入图片描述
这个configure方法似乎只是对registration做了一下初始化工作,每次调用结果都一样:
SpringBoot初始化过程源码解析(八)服务器启动_第4张图片

接着进入getWebServer方法看下factory是如何获取服务器的。

设置一下tomcat存放位置、生成连接、设置tomcat容器的连接:

准备环境的时候给tomcat容器设置了初始化器:

最后通过getTomcatWebServer(tomcat)方法,将传入的tomcat服务器启动,但此时tomcat容器的连接被移除了,也许是因为此时其他的bean还没有注入完成:
SpringBoot初始化过程源码解析(八)服务器启动_第5张图片
启动之后,可以在控制台看到tomcat的启动信息:
SpringBoot初始化过程源码解析(八)服务器启动_第6张图片
来到最后一步:
SpringBoot初始化过程源码解析(八)服务器启动_第7张图片
又来到了start:
SpringBoot初始化过程源码解析(八)服务器启动_第8张图片
在这里找到之前移除的连接并进行设置:
SpringBoot初始化过程源码解析(八)服务器启动_第9张图片

你可能感兴趣的:(SpringBoot初始化过程源码解析(八)服务器启动)