springboot3嵌入式容器源码解析

news/2024/11/25 14:42:02/

问题分析 

不同于使用springmvc,在我们使用springboot时无需配置tomcat就可以直接使用,这就说明springboot已经在我们启动项目时将tomcat配置好了,接下来我们就来看看springboot底层是怎么实现的。

源码解析

ServletWebServerFactoryAutoConfiguration类

在该类中从外部引入了  ServletWebServerFactoryConfiguration.EmbeddedTomcat类

 springboot自动配置tomcat的关键就是 TomcatServletWebServerFactory工厂类。

 通过名字我们大概就可以知道这是一个专门创建WebServer的工厂类。

 在该工厂类中有一个getwebServer的方法,在其中new tomcat类,在该方法中对tomcat类进行了各项的赋值。也就是说只要通过该工厂类的方法就可以创建一个tomcat的服务器。

从上述我们可以知道springboot在启动时的自动配置中,往ioc容器中配置了一个tomcatWebserver的生成工厂。

 此时产生了一个新问题:那仅仅就是添加了一个生成工厂,springboot是怎么调用该工厂的呢?

 源码分析

通过对 getWebServer方法的调用的层次结构

被 ServletWebServerApplicationContext中的createWebServe调用。

createWebServer被 onRefresh方法调用。 

 通过onRefresh这方法名我们就可以知道这个方法的作用大概就是重新加载的意思。其被AbstractApplicationContext的方法refresh调用,此方法就是项目启动时执行的。 (可以将refresh理解为初始化)

onRefresh方法就是刷新spring子容器。

 最终完成tomcat服务器的创建。

当然springboot不单单支持tomcat,其默认支持三种服务器。

 如果我们需要切换为其他的服务器类型,此时我们只需要修改依赖即可。

更改服务器配置步骤为下:

1.在 spring-boot-starter-web依赖中排除spring-boot-starter-tomcat依赖。

2.添加其他两种类型服务器的start依赖。

自定义ServletWebServerFactory

如果我们添加的服务器不属于这三种我们也可以自定义ServletWebServerFactory。

 如果自定义了服务器工厂,默认自动配置的工厂就会失效。我们通过配置类将服务器工厂配置到ioc容器即可。

总结

1.第一步: 启动springboot项目,先自动将默认的配置类配置到ioc容器,此时默认的服务器工厂类就会配置到ioc中,如果有自定义服务器工厂类,则会将自定义的工厂类配置到ioc容器中,默认的配置失效。

2.第二步:Spring容器刷新(启动)的时候,会预留一个时机,刷新子容器。调用onRefresh()方法,创建tomcat服务器。

3.在配置文件中通过server关键字配置服务器的其他信息

 


http://www.ppmy.cn/news/334545.html

相关文章

计算机图片怎样存在桌面上,电脑桌面上怎么放照片

电脑桌面上怎么放照片?照片,指用感光纸放在照相底片下曝光后经显影、定影而成的人或物的图片。下面就由学习啦小编来给大家说说电脑桌面上怎么放照片吧,欢迎大家前来阅读! 电脑桌面上怎么放照片 一、首先要下载这个工具 二、 双击小软件,出现…

VS2019代码编辑器窗口分屏

步骤:【窗口】—【新建垂直选项卡组】 注意一定要打开多个文件(XX.h;XX.cpp),否则没有新建垂直选项卡组这个选项!!! 效果图如下:

基于vue手写一个分屏器,通过鼠标控制屏幕宽度。

基于vue手写一个分屏器&#xff0c;通过鼠标控制屏幕宽度。 先来看看实现效果&#xff1a; QQ录屏20220403095856 下面是实现代码&#xff1a; <template><section class"section"><div class"left" ref"left">这是左边的d…

福昕阅读器【上下分屏】阅读同一个PDF,上下文对照参考阅读,非常方便

在阅读PDF文档的时候&#xff0c;经常会碰到阅读上面几页内容&#xff0c;和下面几页解释需要对照着一起看的情况&#xff0c;总是上下来回滚动鼠标很麻烦&#xff01; 福昕阅读器的【分屏功能】完美解决这个问题。&#xff08;备注&#xff1a;目前我所知&#xff0c;文电通阅…

【时间之外】浏览器分屏使用技巧

目录 浏览器分屏 我的分屏习惯 总结 很多人都知道&#xff0c;win上下左右箭头也可以做到界面的分屏&#xff0c;今天介绍的是浏览器分屏。毕竟现在显卡和显示器的分辨率越来越高了&#xff0c;分屏功能也更加有用武之地。 浏览器分屏 最近升级了浏览器&#xff0c;具体浏…

linux vim分屏函数,Linux学习笔记之十二————vim编辑器的分屏操作

一、分屏操作: sp: 上下分屏,后可跟文件名 vsp: 左右分屏,后可跟文件名 Ctrww: 在多个窗口切换 二、启动分屏: 1.使用大写O参数进行垂直分屏 $ vim -On file1 file2 ... 2.使用小写o参数进行水平分屏 $ vim -on file1 file2 ... 注: n是数字&#xff0c;表示分屏的数量,n要大于…

linux分屏对比两个文件内容,在 Linux 下使用分屏提升工作效能

By Falcon of TinyLab.org Aug 01, 2019 手机分屏曾经成为一个大热点,很方便同时做不同的事情,比如说一边看电影,一边跟人聊天。 在 Linux 下,多独立窗口的分屏本来就支持,但是重新开一个窗口其实有点费事,所以一个窗口内分屏就成为了需求。 分屏的一个很重要应用是做代码…

dvi一分四_公司产品 - 2口4口数字DVI分配器同步显示相同画面一分二一分四一分八DVI-D分屏器 - 两口一进二出,四口一进四出...

2口4口8口数字DVI分配器一进二出一进四出一进八出多屏分配器 功能简介 &#xff0a;从一个数字 DVI Input 到 2个,4 个或8个输出DVI Outputs &#xff0a;采用外接式设计&#xff0c;无内插卡式的系统兼容性问题 &#xff0a;讯号传输达 10 公尺 ( 有效距离 ) &#xff0a;适用…