springboot启动流程简述_请简要说明单位根的流程
SpringBoot流程 说明 启动 简述 简要
2023-06-13 09:11:03 时间
SpringBoot启动流程大概:
- 初始化SpringApplication
- 根据项目的配置情况和Conditional条件来推断是否是一个Web应用。
- 读取所有jar包下面spring.factories文件,解析放入缓存,然后读取
ApplicationListener
为key的监听器,后续在SpringBoot加载的过程中会基于事件发布来做很多扩展通知。
- 真正的
run方法
开始执行,记录开始执行时间stopwatch。 - 读取所有的监听器,放入
SpringApplicationRunListeners
中,以便支持后续的事件发布订阅。 - 发布
ApplicationStartingEvent事件
,属于是一个Startup开始事件,感兴趣的监听器就会执行具体对应的startup方法。 - 基于监听器,加载yml或者properties文件,再根据配置文件中指定的
spring.profiles.active
环境来激活指定的环境配置,来设置Environment对象
。 - 发布
ApplicationEnvironmentPreparedEvent事件
,感兴趣的监听器就会触发具体的方法。 - 打印SpringBoot的Logo、Banner(不重要)。
- 实例化Spring的上下文对象:
AnnotationConfigServletWebServerApplicationContext
。 applicationContext#setEnvironment()
,将环境变量配置对象Environment设置到上下文中,然后执行ApplicationContextInitializer初始化上下文对象。- 发布
ApplicationContextInitialzedEvent事件
,感兴趣的监听器执行对应的容器初始化方法。 - 解析启动类为BeanDefinition对象,以便后续IOC流程。
- 发布
ApplicationPreparedEvent事件
,感兴趣的监听器执行对应的方法。 #refresh()
方法执行,和Spring的refresh不同的是,这个子类是AnnotationConfigServletWebServerApplicationContext
。- 在
#refresh()
方法中,除了执行IOC的流程外,后面还会执行#onRefresh()
方法,这个方法里面就会创建servlet容器
,注册DispatcherServlet
。 - 计算启动总耗时,打印。
- 发布
ApplicationStartedEvent事件
,感兴趣的监听器执行对应的started方法。 - 发布
ApplicationReadyEvent事件
,感兴趣的监听器执行对应的就绪方法。 - 回调2个内置的扩展自动触发方法:
- 回调实现了
ApplicationRunner
接口的类,且自动执行覆写的run方法。 - 回调实现了
CommandLineRunner
接口的类,且自动执行覆写的run方法。
- 回调实现了
- 如果启动过程中发生了异常,则发布
ApplicationFailedEvent
,监听器执行具体的异常处理方法。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171553.html原文链接:https://javaforall.cn
相关文章
- springboot启动原理总结_Springboot启动流程
- springboot到底是什么_Springboot启动流程
- springboot实现热部署
- springboot事物oracle,SpringBoot 事务管理
- springboot mysql事物_SpringBoot事务详细简介[通俗易懂]
- 解决 springboot 多数据源或动态数据源 的事务问题
- springboot数据传输流程_大创项目过程记录范文
- springboot IDEA 过滤器全局赋值的操作使用流程
- springboot IDEA 过滤器全局赋值的操作使用流程
- springboot 配置JedisPool 简洁有效 复制即可运行「建议收藏」
- activiti5.22 springboot 流程引擎 实战全过程
- Springboot集成swagger_springboot nginx
- SpringBoot实现实时监听文件变化
- SpringBoot相关漏洞学习资料,利用方法和技巧合集
- SpringBoot使用Hibernate Validator表单验证
- 3-3. SpringBoot项目集成【用户身份认证】实战 【全流程篇】基于JWT+双重检查的登录+登出+拦截器
- 关于使用IDEA的springboot框架往Redis里写入数据乱码问题
- SpringBoot之starter(R)详解编程语言
- 基于SpringBoot开发一个Restful服务,实现增删改查功能详解编程语言
- springboot中配置tomcat的access log详解编程语言
- SpringBoot 超时设置详解编程语言