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项目启动起来了

 

posted @ 2020-09-22 11:29  爱编程DE文兄  阅读(261)  评论(0编辑  收藏  举报