SpringBoot 高级 原理分析 -- SpringBoot启动流程分析
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 高级 原理分析 -- SpringBoot启动流程分析相关的知识,希望对你有一定的参考价值。
1. SpringBoot启动流程分析
下面是SpringBoot完整的启动流程
说明:本节案例承接SpringBoot 高级 原理分析 – 监听机制,我们通过Debug的方式去查看启动的流程:
1.1 流程分析:初始化
1.1.1 在程序的入口处打一个断点
说明:
点击Step into 进入run方法内部:
SpringApplication对象是事件源的对象,将来SpringBoot里面所有的事件对象都是这个对象里面产生的。
我们点到SpringApplication的构造方法,并在里面打上断点,并把断点放过来:
继续Step over,会判断是否是Web的环境(当前不是Web的环境):
deduceFromClasspath()
方法判断是否是Web环境,就是判断当前环境有没有Servlet相关的class
继续Step over,设置初始化程序Initializer,和监听器(listeners):
1.1.2 初始化的内容(截取上面的图)
1.2 SpringBoot流程分析
我们回到最开始run方法:
现在可以查看初始化的成果了:
可以发现已经拿到了初始化的resouce
和初始化程序Initializer
,和监听器(listeners)
和初始化化参数name=tianjiao
等等。
查看SpringApplicationRunListeners:
继续Step Over调用listeners的starting方法,这会启动所有的listeners。
开始准备配置环境:
打印图案Banner:
打印图案Banner可以自定义:
我们把其他断点去掉,留下banner的断点,并把代码done掉。
添加banner.txt
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\\ = /O
____/`---'\\____
. ' \\\\| |// `.
/ \\\\||| : |||// \\
/ _||||| -:- |||||- \\
| | \\\\\\ - /// | |
| \\_| ''\\---/'' | |
\\ .-\\__ `-` ___/-. /
___`. .' /--.--\\ `. . __
."" '< `.___\\_<|>_/___.' >'"".
| | : `- \\`.;`\\ _ /`;.`/ - ` : | |
\\ \\ `-. \\_ __\\ /__ _/ .-` / /
======`-.____`-.___\\_____/___.-`____.-'======
`=---='
.............................................
佛祖保佑 永无BUG
放行断点,查看自定义的打印图案
创建和准备IOC容器:
这时候IOC容器已经创建和准备好了,但是bean还没有全部加载进来。
只有当refreshContext后才会注入所有IOC管理的bean:
成功启动项目:
以上是关于SpringBoot 高级 原理分析 -- SpringBoot启动流程分析的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot 高级 原理分析 -- @Enable*注解@Import注解
SpringBoot 高级 原理分析 -- 自定义redis-starter
SpringBoot 高级 原理分析 -- SpringBoot启动流程分析