springboot3嵌入式容器源码解析

27 篇文章 2 订阅
11 篇文章 0 订阅

问题分析 

不同于使用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关键字配置服务器的其他信息

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值