美文网首页
Springboot启动流程

Springboot启动流程

作者: 万福来 | 来源:发表于2020-05-08 11:36 被阅读0次

    Springboot启动流程

    1. 执行SpringApplication的静态run方法进行启动,内部其实也是调用SpringApplication的构造方法创建实例对象;
    2. SpringApplication构造方法内部主要做以下几件事:
      • 初始化自定义ResourceLoader;
      • 通过ClassUtil工具类推断webApplicationType,目前主要有三种应用类型,首先检查DispatcherHandler类是否存在,如果存在并且DispatcherServlet不存在则推断为REACTIVE类型应用,否则继续判断Servlet类和ConfigurableWebApplicationContext是否存在,如果其中一个不存在则推断为普通应用,最后默认为SERVLET类型WEB应用;
      • 通过SpringFactoriesLoader扫描所有jar包classpath下META-INF/spring.factories配置,并加载配置中的所有factory配置到cache中;
      • 根据SpringFactoriesLoader获取指定ApplicationContextInitializer类型配置工厂类并实例化,设置到SpringApplication实例对象中;
      • 根据SpringFactoriesLoader获取指定ApplicationListener类型配置工厂类并实例化,设置到SpringApplication实例对象中;
    3. SpringApplication实例化完成后开始执行run方法,进入启动流程,启动之前首先通过SpringFactoriesLoader加载SpringApplicationRunListeners类型的所有实现类,并将SpringApplication实例对象通过构造方法注入,并遍历执行RunListener实现类的starting方法,通知他们,我要开始启动了;
    4. 准备配置环境,并执行RunListener的environmentPrepared方法,通知他们,配置环境准备好了,并将配置环境绑定到SpringApplication;
    5. 加载spring的默认banner;
    6. 根据webApplicationType类来创建对应的配置应用上下文;
    7. 准备上下文,主要有以下几个步骤:
      • 上下文设置配置环境;
      • 配置上下文的beanNameGenerator和resourceLoader等;
      • 遍历执行ApplicationContextInitializer的所有实现类initialize方法,通知他们应用上下文正在进行初始化操作;
      • 遍历执行SpringApplicationRunListeners的contextPrepared方法,通知他们,上下文正在准备中;
      • 根据上下文修改BeanFactory的特殊配置;进行BeanFactory和启动Banner的自定义配置,主要包括BeanDefinition的覆盖策略;
      • 最后在遍历执行SpringApplicationRunListeners的contextLoaded,通知他们上开始加载上下文;
    8. 上下文准备好之后开始执行刷新上下文操作,并注册关闭钩子函数;
    9. 上下文刷新之后应用上下文容器已经启动完成,开始执行SpringApplicationRunListeners的started方法,通知他们spring容器上下文已经启动完成;
    10. 最后通过spring容器上下文获取所有的ApplicationRunner和CommandLineRunner实现类,并执行他们的run方法。

    相关文章

      网友评论

          本文标题:Springboot启动流程

          本文链接:https://www.haomeiwen.com/subject/lszxnhtx.html