servlet容器_Spring Boot学习04_外部Servlet容器启动原理

1、创建使用外部Servlet容器的Spring Boot的项目,会多一个类。

6aba5f1032fb97e7654fe5382d3844d8.png

2、通过外部的tomcat的启动时会发现先启动tomcat,然后就会启动之前Spring Boot的主配置类程序。

38e70967d867399b617ee1f68b1d7e4f.png

3、在Servlet3.0的有几个规范

​ 1)、服务器启动(web应用启动)会创建当前web应用里面每一个jar包里面ServletContainerInitializer实例

​ 2)、ServletContainerInitializer的实现放在jar包的META-INF/services文件夹下,有一个名为javax.servlet.ServletContainerInitializer的文件,内容就是ServletContainerInitializer的实现类的全类名

​ 3)、还可以使用@HandlesTypes,在应用启动的时候加载我们感兴趣的类;

该文件就在spring-web包下

f9afda1a47162228e08c999e1675e132.png

4、在应用启动时就会加载web应用里面每一个jar包里面ServletContainerInitializer实例中的onStartup方法

这里会获得感兴趣的类的实例并遍历调用它们的onStartup方法

b081b5a86d084a3b723dd2dc04e9d4f1.png

5、在ServletContainerInitializer的实现类SpringServletContainerInitializer上有个
@HandlesTypes({WebApplicationInitializer.class}),WebApplicationInitializer就是我们感兴趣的类,查看WebApplicationInitializer接口的子类发现就有我们上面比嵌入式Servlet容器的Spring Boot项目多余出来的ServletInitializer类

9bae0017867c8bb345d7580f157810db.png

6、而我们这个类没有onStartUp方法,进入它父类找到onStartUp方法

主要就是这个createRootApplicationContext方法,我们进入这个方法

0c8d4e8a5ed846dad9550848bfcb6f6c.png

7、configure方法ServletInitializer类有这个方法,所以就会调用自己的configure方法,传进去的参数是当前项目的主配置类

51cc4106f77197539e148e787dc7f483.png

b002deb8c17bc2ada2f25db0fa85870e.png

8、最后构建出一个SpringApplication对象并调用run方法跑起来。

e662fd9cedba7e262c80bd4b9935433a.png

9、而run方法一路点过去,会发现到了之前我们主配置类启动时调用的run方法,最终我们的SpringBoot应用就启动起来了。

564c2937e1a346fa590a4291a8a93e07.png

1c4db3e26755d1f813bf5298015eb5d2.png

总结:在外部的Servlet的容器启动的时候因为Servlet3.0有个规则就会加载所有感兴趣类中的onStartUp方法,然后调用我们多出来的ServletInitializer类的Configure方法,把当前项目的主配置类传进去,创建出SpringApplication对象并启动SpringBoot应用。最终项目就是tomcat先启动,然后再是Spring Boot项目启动,当然Spring Boot中的功能是一样能用的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值