编程框架-springboot启动流程(springboot+2.2.x)

背景

每天都在使用spring boot,不了解基础的启动流程是真的说不过去。本wiki将进行启动流程阐述。

启动流程

  • 推断应用的类型,是普通的类型还是web类型
  • 查找并且加载initiallizers
  • 查找并且加载listeners
  • 推断并设置main方法的定义类,找到运行的主类

在这里插入图片描述

run时序图

DemoApplication SpringApplication StopWatch System SpringFact BeanUtils SpringApplicat Binder SpringApplicati SpringBootExc ConfigurableApp AbstractAppli ListableBeanFactory ApplicationRunner run(传入自己的class) 构造一个 推断web类型、 推断main的所 在类、初始化上下 run 创建并时间监控 setProperty(设置必要的环境变量) loadFactoryNames(获取META-INF/spring.factories的类名,本次只关心SpringApplicationRunListener) instantiateClass(实例化拿到的类) starting(开始监听) 配置web环境和profile等参数(以及客户化环境) SpringApplication和web环境绑定 通知web环境准备完毕 打印banner图 创建指定的上下文org.springframework.context.annotation.AnnotationConfigApplicationContext 创建异常报告者(获取META-INF/spring.factories的类名,本次只关心SpringBootExceptionReporter) 准备上下文 通知准备上下文完成 refresh(刷新过程是各种资源的整合过程) 完成时间监控 started(通知开始完毕) getBeansOfType(获取所有的Runner) run(调起回调) DemoApplication SpringApplication StopWatch System SpringFact BeanUtils SpringApplicat Binder SpringApplicati SpringBootExc ConfigurableApp AbstractAppli ListableBeanFactory ApplicationRunner

通过listener的视角观察启动过程

创建一个spring boot的Hello项目,并且添加一个listener
在这里插入图片描述
添加了断点以后,运行,看看效果
在这里插入图片描述
这里可以清楚的看到是进行同步传消息,而且把SpringApplication对象也回调回来了。
initializers一共有7个,listeners共12个(最后一个是我们注册的)。
在这里插入图片描述
initializers来源于(spring模仿的jdk的spi技术):
在这里插入图片描述
listeners来源于(spring模仿的jdk的spi技术)
在这里插入图片描述
listener一共回调了n个消息,依次为:

  • ApplicationStartingEvent
  • ApplicationEnvironmentPreparedEvent
  • ApplicationContextInitializedEvent
  • ApplicationPreparedEvent
  • ContextRefreshedEvent
  • ApplicationStartedEvent
  • ApplicationReadyEvent
  • ContextClosedEvent

通过Configuration的视角

以Mybatis的启动器为例来进行阐述
在这里插入图片描述
下断点进行跟踪,最终会进行sqlSessionFactory的bean创建
在这里插入图片描述
bean的创建必然是通过spring-beans模块实现的,如下图
在这里插入图片描述
beanName是来自于spring.factories中的EnableAutoConfiguration配置,实现类为(在spring-boot-autoconfigure包中)
在这里插入图片描述

评价

本wiki都是用的上层概念来进行推测,之后需要深入到每个模块中去,才可以更好的了解其中的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值