欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springboot为什么可以省去配置Tomcat的步骤?

程序员文章站 2022-03-26 15:02:19
前言这篇文章探索一下springboot的tomcat是如何实现的一、起步依赖1.首先我们了解一下起步依赖SpringBoot结合Maven管理,无需关注不同的依赖,不同版本是否存在冲突的问题。通过spring-boot-starter-parent、spring-boot-starter等实现依赖的船体、版本管理等SpringBoot存在大量的spring-boot-starter-xxx。这些依赖对某种或某类功能进行了组织,从而达到了起步依赖的目的。2.上图直观的看依赖关系我们平...

前言

这篇文章探索一下springboot的tomcat是如何实现的


一、起步依赖

1.首先我们了解一下起步依赖

  • SpringBoot结合Maven管理,无需关注不同的依赖,不同版本是否存在冲突的问题。
  • 通过spring-boot-starter-parent、spring-boot-starter等实现依赖的传递、版本管理等

SpringBoot存在大量的spring-boot-starter-xxx。这些依赖对某种或某类功能进行了组织,从而达到了起步依赖的目的。

2.上图直观的看依赖关系

springboot为什么可以省去配置Tomcat的步骤?
我们平常创建好一个SpringBoot项目初始化就会依赖一个spring-boot-starter,当我们想启动项目的时候,就必须在添上 -web让他成为一个spring-boot-starter-web项目。
为什么呢?,我们点击进去,这里看

springboot为什么可以省去配置Tomcat的步骤?
是了!它引入了tomcat的依赖,并且仔细观看后还有一些其它的依赖
springboot为什么可以省去配置Tomcat的步骤?
可以看到,当我们把第一层pom中的spring-boot-starter改变为了spring-boot-starter-web,进来后这个web中又引入了spring-boot-starter!
springboot为什么可以省去配置Tomcat的步骤?
这里也引入了webMVC的依赖

二、追踪源码

把pom中改成web项目后启动看看 这里成功启动了
springboot为什么可以省去配置Tomcat的步骤?
啊这,细心一点的话可以看到中间的路径类,发现目标TomcatWebServer

1.TomcatWebServer
springboot为什么可以省去配置Tomcat的步骤?
可以看到他有一个成员变量属性tomcat,并且实现了一个WebServer的接口,那这个WebServer的关系是什么样呢?
springboot为什么可以省去配置Tomcat的步骤?
这个接口原来不单单一个tomcat,还有其它可以代替tomcat的Web容器。
看它的构造方法,这个构造参数中的tomcat是谁传入进来的?

public TomcatWebServer(Tomcat tomcat, boolean autoStart) {
        this.monitor = new Object();
        this.serviceConnectors = new HashMap();
        Assert.notNull(tomcat, "Tomcat Server must not be null");
        this.tomcat = tomcat;
        this.autoStart = autoStart;
        this.initialize();
    }

我们继续往下追踪

2.TomcatServletWebServerFactory

原来是这个类new了一个TomcatWebServer,并且传入了一个tomcat类。

protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
        return new TomcatWebServer(tomcat, this.getPort() >= 0);
    }

那么TomcatServletWebServerFactory类中getTomcatWebServer的方法参数tomcat是谁传入的呢?我们接着找。
springboot为什么可以省去配置Tomcat的步骤?
阿,果然还是你,通过本类getWebServer方法返回值调用了getTomcatWebServer,那么看看这个日日念念的tomcat是怎么来的呢

原来是在这个方法中new了一个tomcat对象!

三、结尾

我们再来看TomcatWebServer的构造方法

public TomcatWebServer(Tomcat tomcat, boolean autoStart) {
        this.monitor = new Object();
        this.serviceConnectors = new HashMap();
        Assert.notNull(tomcat, "Tomcat Server must not be null");
        this.tomcat = tomcat; //赋值给类中属性
        this.autoStart = autoStart;
        this.initialize();//初始化方法
    }

现在应该知道了吧,其实底层就是new了一个tomcat对象。经过这样一轮传值传到这个类的构造方法,然后赋值给这个类中的tomcat成员变量,最后调用初始化方法即可
来看看初始化 initialize() 方法
springboot为什么可以省去配置Tomcat的步骤?
调用这个方法,其中start()启动了,并且设置了守护线程防止闪退。

流程图

这里是我理解的一个流程图,这篇所说的大概就包含这些了
springboot为什么可以省去配置Tomcat的步骤?
好了,不知道看完这篇是不是对SpringBoot中内嵌式容器tomcat有点点的了解了,如果有错误之处,欢迎指点,我们下期见。

本文地址:https://blog.csdn.net/weixin_44355855/article/details/108845427

相关标签: SpringBoot