spring-boot启动流程
spring-boot 启动
- spingboot-start
- SpringApplication构造方法
- 使用 SpringFactoriesLoader 在 classpath 中查找并加载所有可用的 ApplicationContextInitializer
- 使用 SpringFactoriesLoader 在 classpath 中查找并加载所有可用的 ApplicationListener
- 通过stackTrace里的main方法查找启动类
- SpringApplication.run()
- 创建StopWatch计时器
- 通过 SpringFactoriesLoader 查找并加载 SpringApplicationRunListener 列表,调用 SpringApplicationRunListener.started() 方法
- 创建Environment
- configureEnvironment()
- listeners.environmentPrepared(): 广播 ApplicationEnvironmentPreparedEvent 事件
- 打印banner
- createApplicationContext(): 创建applicationContext
- prepareContext()
- context.setEnvironment()
- postProcessApplicationContext()
- applyInitializers():调用 initializers.initialize()
- listeners.contextPrepared():广播 ApplicationContextInitializedEvent
- load():加载 beanDefinitions
- listeners.contextLoaded()
- 1.若listener实现了 ApplicationContextAware 接口,调用 setApplicationContext()
- 2.广播ApplicationPreparedEvent事件
- refreshContext():调用 spring 的 refresh()方法
- AbstractApplicationContext.refresh()逻辑
- afterRefresh():钩子,目前 do nothing
- 广播 ApplicationStartedEvent 事件
- callRunners()
- 调用ApplicationRunner和CommandLineRunner类型对象的run()方法
- 若上面执行有异常,则handleRunFailure()
- listeners.running():广播ApplicationReadyEvent事件
- SpringApplication构造方法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 flyingzc's blog!