美文网首页
spring-boot 启动

spring-boot 启动

作者: 何德何能者 | 来源:发表于2021-02-07 18:40 被阅读0次
    • 1、实例化/初始化 springAppliction 构造函数处理了几个事

      • 持有启动方法传递的class对象
      • 是否是web类型,还是都不是
      • 初始化spring.factories配置的 ApplicationContextInitializer对象①
      • 初始化spring.factories配置的 ApplicationListener对象②
      • 从调用栈里查找main方法的类对象.
    • 2、运行

      • 配置awt headless模式,声明没有图像设备等.
      • 初始化spring.factories和输入参数指定的 SpringApplicationRunListener对象, 并启动监听.
      • 触发所有的SpringApplicationRunListener的starting方法->发出ApplicationStartingEvent事件③
      • 初始化环境environment
      • 根据环境创建environment
        • 触发所有的SpringApplicationRunListener的environmentPrepared方法->发出ApplicationEnvironmentPreparedEvent事件③
      • 实例化/初始化ApplictionContext, 会判断是否是web环境, 创建对应的applictionContext
      • 初始化spring.factories配置的 SpringBootExceptionReporter对象, 该对象会同时加载spring.factories配置的FailureAnalyzer类对象。SpringBootExceptionReporter用于程序启动时异常捕获,并输出成易于查看的格式.
      • 准备ApplictionContext
        • 触发所有ApplicationContextInitializer对象的initialize方法
        • 触发SpringApplicationRunListener的监听,触发contextPrepared方法 ->发出ApplicationContextInitializedEvent事件③
        • 根据启动方法的class对象加载资源
        • 触发SpringApplicationRunListener的监听,触发contextLoaded方法->发出ApplicationPreparedEvent事件③
    • 刷新ApplictionContext, 委托给spring最原始的refresh方法

      • 触发SpringApplicationRunListener的监听,触发started方法->发出ApplicationStartedEvent事件③
    • 触发ApplicationRunner, CommandLineRunner实现类的run方法

    • 触发SpringApplicationRunListener的监听,触发running方法->发出ApplicationReadyEvent事件③

    方法运行结束,程序退出

    ① 可以实现自己的ApplicationContextInitializer, 在springApplication前执行.
    ② 可以监听启动过程发生的事件, 如ConfigFileApplicationListener监听ApplicationEnvironmentPreparedEvent事件,处理EnvironmentPostProcessor,可以自定义自己的配置文件加载等.
    ③ 可以监听事件,在启动的不通阶段插入自定义的处理.

    总结:

    spring-boot的启动扩展的ApplicationContext,在ApplicationContext初始化/刷新前后做了自定义处理。也方便开发人员在流程中自定义插入自己的实现.

    相关文章

      网友评论

          本文标题:spring-boot 启动

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