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

     

  • 相关阅读:
    xdg-open filename 以相应的程序 打开文件
    列出zip文件内全部内容 当前目录下的所有文件压缩成zip格式的文件(file.zip)
    网线的制做
    多少天以后的时期和多少天以前的日期
    更数数据库用户密码
    tengine-2.1.0 源码安装
    inode
    mysql 查看用户的权限
    SQL Server 2008 R2占用内存越来越大两种解决方法
    SQL死锁知识及解决办法
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13711058.html
Copyright © 2020-2023  润新知