Spring的几大面试问题

一、SpringBoot启动流程

1.重点看以下图中的构造方法和run方法

Spring的几大面试问题_第1张图片

2.debug看源码

(1)从主启动类debug

(2)步入进去

发现里面有我们的两个目标方法。Spring的几大面试问题_第2张图片

(3)先看SpringApplication()构造方法

里面的primarySources记录了启动类,就会扫描该类下的包以及子包。

在进入重载的构造方法。Spring的几大面试问题_第3张图片

其中下面就是确定web应用的类型,其中servlet就是传统的web应用。

这个就是加载ApplicationContextInitializer,那是从哪加载的呢?是从spring.factories文件加载的。

使用debug时的一个小方法,选中getSpringFactoriesInstances(),然后评估表达式,可以预执行该段代码,看到获取了哪些Initializer,其中第四个是自己自定义写的,其他的是从其他jar包下的获取的。

Spring的几大面试问题_第4张图片

这个就是加载ApplicationListener,和上面一样。

最后就是记录下了主启动类, 第一部分的构造方法就结束了。

(4)然后步出,进入run()

Spring的几大面试问题_第5张图片

准备环境对象加载系统属性等等,并且打印Banner。

Spring的几大面试问题_第6张图片

然后实例化容器。

准备容器,为容器设置environment等等,并加载主类对应的BeanDefinition。

然后刷新容器,可以看看context加载了什么。

我们主要看beanFactory里面的singletonObjects,因为这里就是创建的所有对象。Spring的几大面试问题_第7张图片

然后步过刷新容器,创建了很多的bean对象,有自己写的。Spring的几大面试问题_第8张图片

因为我们只看springBoot启动流程,只需要知道这个过程是什么,其中刷新容器是比较复杂的,再后面更新IOC容器初始化流程会再详细说明。

最后,返回容器。Spring的几大面试问题_第9张图片

3.那么,面试时应该怎么对面试官说呢?

参考了黑马程序员,如下图:Spring的几大面试问题_第10张图片

你可能感兴趣的:(面试,java,职场和发展)