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:
成功启动项目:
|