springboot源码系列 - springboot如何启动web环境

springboot如何启动web环境

  1. 当pom.xml里,不依赖spring-boot-starter-web时,

SpringApplication.run(App.class, args);

不会启动tomcat

  1. 当pom.xml里,依赖spring-boot-starter-web后,

SpringApplication.run(App.class, args);

会启动tomcat

  1. 为何?
    3.1 在springboot启动时,各种refresh会来到
    图001
    applicationContext的值取决于webApplicationType, 那么webApplicationType的值是关键,webApplicationType在SpringApplication构造方法里被设置,一共有三个类型可选择(REACTIVE, SERVLET, NONE)

图002

重点代码:
this.webApplicationType = WebApplicationType.deduceFromClasspath();
从Classpath里推断webapp的类型

图003

这段代码的主要目的,是以下3点:
a. classpath里有webflux(pom里依赖了,就会扫描加载到),webApplicationType = REACTIVE;不在判断是否有servlet,webflux优先级很高
b. classpath里有servlet(pom里依赖了,就会扫描加载到),webApplicationType = SERVLET;
c. classpath里没有以上两个,webApplicationType = NONE;

搞定了webApplicationType,就可以来搞applicationContext了,

图004

图005

很显然,得到了DEFAULT_SERVLET_WEB_CONTEXT_CLASS作为context,也就是AnnotationConfigServletWebServerApplicationContext

所以呢,在后来的

图006

这里的refresh就会进入

图007

而且,super里的onRefresh()也会进入servletWebServletApplicationContext里

图008

那么好,下面就是最关键,最核心的源码了

图009

这里会创建,启动tomcat,具体我就不在跟进去了,自己看吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值