【原创】Spring Boot 终极篇《下》
关注“Java后端技术全栈”**
回复“面试”获取全套面试资料
在前面文章中,我们聊过SpringBoot是如何解决依赖配置,以及如何实现自动装配的。今天我们继续来聊Springboot的启动流程。
SpringBoot项目是如何启动的?
这就是我们项目中所谓的启动类。上一篇文章【原创】Spring Boot终极篇《上》我们主要是聊了注解@SpringBootApplication
原理以及是如何实现自动装配的。在这里启动类里还有很重要就是main方法里的:
不妨我们进去看看这个run方法里有些什么东东:
从上面的源码中,我们可以看到这个 run 方法,实际上分两步:
创建一个 SpringApplication 实体
执行 run 方法。
SpringApplication 实例化
我们点进去看下,发现其实就是一个初始化的过程。
说一下几个相对重要的配置:
run 方法初始化启动
我们接下来看下 run 方法。这个 run 方法执行的步骤比较多。下面是源码及部分注释:
这里我们可以将主要执行流程列出来:
1、获取并启动监听器
2、根据监听器和参数来创建运行环境
3、准备 Banner 打印器
4、创建 Spring 容器
5、Spring 容器前置处理
6、刷新容器
7、Spring 容器后置处理
8、发出结束执行的事件通知
9、返回容器
在 run 方法中,在最开始的时候,会启动一个 StopWatch 对象,用来记录 run 方法执行时长,这个我们了解就行,然后是一些初始化,接下啦核心一步就是创建并启动监听器啦。创建好监听器后,就需要创建运行环境。prepareEnvironment () .主要初始化加载外部化配置资源到 environment,包括命令行参数、servletConfigInitParams、application.yml(.yaml/.xml/.properties) 等;初始化日志系统。
接下来打印 banner
再接下来创建 spring 容器
创建好 spring 容器后,开始 spring 容器的前置处理
前置处理做了很多操作:主要是将启动类注入到容器中,包含环境,上下文,bean 等等。
前置处理 执行完之后,就会刷新容器
主要是对 IOC 容器的初始化。然后就是 spring 容器的后置处理。
我们可以重写这个方法,实现我们自定义的需求。
接下来就是发出结束执行的事件通知:
最后就是执行 Runners:
用于调用项目中自定义的执行器 XxxRunner 类,使得在项目启动完成后立即执行一些特定程序。Runner 运行器用于在服务启动时进行一些业务初始化操作,这些操作只在服务启动后执行一次。Spring Boot 提供了 ApplicationRunner 和 CommandLineRunner 两种服务接口。
执行完之后,就是返回上下文容器了。
启动流程的总结
以上便是Spring Boot的整个启动流程。好啦,最后来总结一下,整个Spring Boot的启动流程,分为以下几个步骤:
加载并且启动监听器
创建项目运行环境,加载配置
初始化 Spring 容器
执行 Spring 容器前置处理器
刷新 Spring 容器
执行 Spring 后置处理器
发布事件
执行自定义执行器
返回容器
看源码时候,咱们尽量看重点,注重整体设计思路的把握。
推荐阅读
版权声明: 本文为 InfoQ 作者【田维常】的原创文章。
原文链接:【http://xie.infoq.cn/article/369fe9445b46f4619b7d7c68d】。文章转载请联系作者。
评论