springboot省去配置Tomcat的步骤问题

作者:改天是哪天. 时间:2023-03-13 18:58:44 

前言

这篇文章探索一下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的步骤问题

来源:https://blog.csdn.net/weixin_44355855/article/details/108845427

标签:springboot,配置,Tomcat
0
投稿

猜你喜欢

  • Android 关机弹出选择菜单的深入解析

    2023-03-19 20:56:09
  • 在C#程序中对MessageBox进行定位的方法

    2022-03-04 18:45:26
  • JVM致命错误日志详解(最新推荐)

    2023-08-22 07:42:30
  • SpringBoot2 整合Ehcache组件,轻量级缓存管理的原理解析

    2022-02-07 22:04:34
  • 解析c#在未出现异常情况下查看当前调用堆栈的解决方法

    2023-05-18 02:54:04
  • java中response对象用法实例分析

    2023-08-23 18:51:04
  • 浅谈java 重写equals方法的种种坑

    2023-02-03 08:14:12
  • Java 详解循环屏障CyclicBarrier如何实现多线程分段等待执行完成

    2022-02-16 04:50:49
  • springboot+mybatis-plus 两种方式打印sql语句的方法

    2022-12-29 13:41:11
  • Java中的ArrayList容量及扩容方式

    2023-10-17 17:24:40
  • Java泛型与数据库应用实例详解

    2023-08-14 09:37:15
  • Stream distinct根据list某个字段去重的解决方案

    2022-06-22 22:23:26
  • Android仿网易客户端顶部导航栏效果

    2022-08-20 08:03:00
  • Android 全屏无标题栏的三种实现方法

    2022-01-05 03:01:31
  • Android基于opencv实现多通道分离与合并

    2022-05-04 09:49:29
  • C语言实现Flappy Bird小游戏

    2022-03-13 13:56:24
  • 浅谈JAVA如何生成UUID唯一标识

    2023-08-12 20:45:03
  • 使用ObjectMapper解析json不用一直new了

    2023-11-25 05:20:10
  • c#单例模式(Singleton)的6种实现

    2021-07-01 10:17:51
  • Java实现的RSA加密解密算法示例

    2022-05-03 09:20:38
  • asp之家 软件编程 m.aspxhome.com