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启动流程分析

SpringBoot 高级 原理分析 -- 监听机制

SpringBoot 高级 原理分析 -- 切换内置web服务器

SpringBoot 高级 原理分析 -- SpringBoot 自动配置:Condition