0
点赞
收藏
分享

微信扫一扫

spring核心源码分析第十五篇 refresh流程之onRefresh

Ad大成 2022-01-04 阅读 36

这里写目录标题

调用链路

AnnotationConfigServletWebServerApplicationContext
ServletWebServerApplicationContext#onRefresh
GenericWebApplicationContext#onRefresh#onRefresh

核心源码

  • 创建tomcat服务器
	protected void onRefresh() {
		super.onRefresh();
		try {
			createWebServer();
		}
		catch (Throwable ex) {
			throw new ApplicationContextException("Unable to start web server", ex);
		}
	}
  • 创建tomcat

	private void createWebServer() {
		WebServer webServer = this.webServer;
		ServletContext servletContext = getServletContext();
		if (webServer == null && servletContext == null) {
			ServletWebServerFactory factory = getWebServerFactory();
			创建tomcat 构建内部组件关系
			this.webServer = factory.getWebServer(getSelfInitializer());
		}
		else if (servletContext != null) {
			try {
				getSelfInitializer().onStartup(servletContext);
			}
			catch (ServletException ex) {
				throw new ApplicationContextException("Cannot initialize servlet context",
						ex);
			}
		}
		initPropertySources();
	}
  • 构建tomcat,设置连接器
  • 设置service
  • 设置Engine容器
  • 简介tomcat:一个server服务器有多个service服务,每个service可以有多个连接器,一个连接器一般代表一个协议[http,ajp]连接通道,一个service只能有一个容器,一个容器可以有多个子容器[engine-host-context-wrapper],engine为顶级容器,参见tomcat专栏[待出]
public WebServer getWebServer(ServletContextInitializer... initializers) {
		Tomcat tomcat = new Tomcat();
		File baseDir = (this.baseDirectory != null) ? this.baseDirectory
				: createTempDir("tomcat");
		tomcat.setBaseDir(baseDir.getAbsolutePath());
		Connector connector = new Connector(this.protocol);
		tomcat.getService().addConnector(connector);
		customizeConnector(connector);
		tomcat.setConnector(connector);
		tomcat.getHost().setAutoDeploy(false);
		configureEngine(tomcat.getEngine());
		for (Connector additionalConnector : this.additionalTomcatConnectors) {
			tomcat.getService().addConnector(additionalConnector);
		}
		prepareContext(tomcat.getHost(), initializers);
		return getTomcatWebServer(tomcat);
	}

总结

  • onRefresh主要覆写了父类的方法,从而完成了嵌入式tomcat初始化
举报

相关推荐

0 条评论