zoukankan      html  css  js  c++  java
  • 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项目启动起来了

     

  • 相关阅读:
    free
    Lynyrd Skynyrd
    Tree 园丁的烦恼
    On Changing Tree
    Path Queries
    Java开发中的23种设计模式详解(转)
    cas单点登录实现
    Java内存溢出详解
    java多线程并发
    java代码实现图片处理功能。对图片质量进行压缩。
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13711058.html
Copyright © 2011-2022 走看看