SpringBoot_web开发-外部Servlet容器启动SpringBoot应用原理
1.服务器启动时要先创建每一个jar包里面的ServletContainerIntialize实例,提前说下这个ServletContainerIntializer(接口)的创建是通过反射的,因此我们得获取它的实现类的全类名
2.jar包中的/META-INF/services文件夹下有一个javax.servlet.ServletContannerIntialize的文件,文件的内容就是列举了ServletContainerIntializer全部实现类的类名
3.HandlesYTypes方法能够在项目启动的时候加载我们指定的类,这个跟添加对象到spring容器不同,这个注解的作用等下就体现了
前面4步的解释:
1.启动tomcat
2.创建springServletContannerInitialize实例,我们看到这个类的代码,如图:
3.在springServletContannerInitialize类中有一个onStartUp方法,这个方法拿到了所有的WebApplicationInitialize的class对象,并创建他们各自的实例
4.接着每个WebApplicationInitialize实例会调用他们自己的onStartUp方法。
-------------------------------------分割线
5.6步的解释:
1.我们有一个疑问加载所有的WebApplicationInitialize,并调用他们的onstart方法有什么用呢?
2.我们可以点进去看它的代码和继承关系,如图:
3.核心就在于SpringBootServletInitializer的onStartUp方法,这个方法中有个createRootApplicationContext()来创建根容器,我们点进去这个发现它第一步先创建了一个springApplicationBuilber的构建器,并调用SpringBootServletInitializer的configurer方法,把构建器当作参数传入进去,没错,这里调用的configurer正是子类的configurer,这样构建器就拿到了springboot的主程序类并返回,接着就调用构建器的build()创建springboot应用,后面并执行了springboot应用的run方法,把springboot项目启动起来了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~