- 对于另外的EmbeddedJetty和EmbeddedUndertow,逻辑类似,都是判断项目依赖中是否有Jetty和Undertow的依赖,如果有,那么对应在Spring容器中就会存在JettyServletWebServerFactory类型的Bean、或者存在UndertowServletWebServerFactory类型的Bean 。
TomcatServletWebServerFactory的作用:获取WebServer对象
- TomcatServletWebServerFactory他实现了ServletWebServerFactory这个接口 。
- ServletWebServerFactory接口内部只有一个方法是获取WebServer对象 。

文章插图
- WebServer拥有启动、停止、获取端口等方法,就会发现WebServer其实指的就是Tomcat、Jetty、Undertow 。

文章插图
- 而TomcatServletWebServerFactory就是用来生成Tomcat所对应的WebServer对象,具体一点就是TomcatWebServer对象,并且在生成TomcatWebServer对象时会把Tomcat给启动起来 。
- 在源码中,调用TomcatServletWebServerFactory对象的getWebServer()方法时就会启动Tomcat 。
public WebServer getWebServer(ServletContextInitializer... initializers) { if (this.disableMBeanRegistry) { Registry.disableRegistry(); } // 构建tomcat对象 Tomcat tomcat = new Tomcat(); // 设置相关的属性 File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir("tomcat"); tomcat.setBaseDir(baseDir.getAbsolutePath()); for (LifecycleListener listener : this.serverLifecycleListeners) { tomcat.getServer().addLifecycleListener(listener); } Connector connector = new Connector(this.protocol); connector.setThrowOnFailure(true); 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); // 启动tomcat,这个方法内部有this.tomcat.start(); return getTomcatWebServer(tomcat);}spring boot启动的时候启动tomcat
- SpringBoot的启动过程中,会调用核心的refresh方法,内部会执行onRefresh()方法,onRefresh()方法是一个模板方法,他会执行会执行子类ServletWebServerApplicationContext的onRefresh()方法 。
protected void onRefresh() { // 模板方法,先调用它父类的,一般是空方法 super.onRefresh(); try { // 创建web容器 createWebServer(); } catch (Throwable ex) { throw new ApplicationContextException("Unable to start web server", ex); }}
经验总结扩展阅读
-
-
葡萄干配一物,每天喝一杯,不贫血了,眼睛亮了,女人常喝不显老
-
-
涂抹 “一款三用”的平价口红,不挑肤色巨显白,素颜涂也能彰显高级感
-
-
-
-
总有人在问 太多婚后的真爱,不过只是一时的激情,根本就当不得真
-
热水器不出热水怎么回事,电热水器不出热水怎么回事?
-
因为走丢了的哈士奇被送进了派出所,结果把派出所拆了,不愧为拆家王
-
8月底,痛定思痛,爱恨清空,展望未来,高傲离去,真爱就在眼前
-
-
-
-
怎么开心怎么过 致35岁的女人:往后你要怎么开心怎么过
-
相思梧叶影视情感说|《北辙南辕》:中年夫妻应该如何经营婚姻?不妨学学杜世均和司梦
-
-
喝不完的奶粉可以放到下次喝吗,喝剩的奶粉可以下顿喝吗
-
2022年农历腊月初九搬新家吉日 2022年12月31日搬新家好不好
-
2022年农历九月十六修坟吉日 2022年10月11日适合修坟吗