Spring Boot 启动流程

一、创建SpringApplication对象

 在META-INF配置相关监听器

1、以Debug模式启动应用

2、Step Into SpringApplication.run方法,对run方法进行包装

3、继续Step Into run方法,这时候会先创建SpringApplication对象,然后才允许run方法

4、继续Step Into

5、进入this.initialize(sources)方法,判断sources是否为空,如果不为空就保存主配置类。之后

通过this.deduceWebEnvironment()方法,判断是否为web应用,因为导入了web模块,所以为web应用。

6、this.setInitializers方法的核心就是调用getSpringFactoriesInstances方法,点击this.getSpringFactoriesInstances(ApplicationContextInitializer.class)方法,之后点击

this.getSpringFactoriesInstances(type, new Class[0]);方法,这时候会看到有一个loadFactoryNames方法,会去类路径下
META-INF/spring.factories配置的所有 ApplicationContextInitializer 类,然后保存

7、this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));点击setInitializers方法,我们可以看到有7个ApplicationContextInitializer类

8、ApplicationContextInitializer已经拿到所有并保存起来,ApplicationListener道理也一样,也是去META-INF/spring.factories配置的所有 ApplicationListener类,拿到10个ApplicationListener,然后保存

,9、从多个配置类中找到含有mainf方法的配置类,此时SpringApplication对象创建成功。

二、启动应用 run方法

1、当SpringApplication对象创建完成,继续Step Into

继续Step Into

2、进入run方法

3、run方法里面的 

也是从类路径下的META-INF/spring.factories拿到Listener

4、回调所有的listeners.starting();方法

5、run方法里面prepareEnvironment方法,创建应用所需的环境,环境创建成功后,继续回调SpringApplicationRunListeners的environmentPrepared方法

6、看控制台,打印的是

7、 创建IOC容器,如果是web就创建web IOC容器,否侧就创建普通IOC容器。

8、异常分析

9、准备上下文环境;将environment保存到ioc中;而且applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法;回调所有的SpringApplicationRunListener的contextPrepared();

10、初始化(刷新)IOC容器,如果是web IOC容器,会创建嵌入式Tomcat,作用:扫描、创建、加载所有组件(配置类、组件、自动配置)

11、先回调ApplicationRunner,回调CommandLineRunner

12、回调所有SpringApplicationRunListener 的finished

13、Spring Boot应用启动完毕,并返回IOC容器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值