Spring 之Srping IOC运行时序图

加载XML文件——创建IOC容器时序图

Spring 之Srping IOC运行时序图_第1张图片

源码理解

首先需要找到入口。IOC容器初始化运行的入口。

回顾

什么是SpringIOC

IOC(Inversion Of Control)控制反转,所谓控制反转,就是把我们代码中需要实现的对象的创建、依赖。反转给容器来实现。同时需要一种描述让容器知道需要创建的对象和对象之间的关系。即配置文件。

寻找源码入口

1.关于BeanFactory

Spring 之Srping IOC运行时序图_第2张图片

Spring 之Srping IOC运行时序图_第3张图片

BeanFactory:顶层接口类,定义了IOC容器的基本规范。
三个重要子类:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory
最终的默认实现类:DefaultListableBeanFactory
Spring内部在操作过程中对象的传递和转化过程中,有这各自的职能。如ListableBeanFactory接口,表示可初始化列表Bean

根据时序图来解析

如何找到入口

Spring 之Srping IOC运行时序图_第4张图片

通过对Spring的使用以及初步的认识,我们知道Spring的初始化是从DispatcherServlet开始的,我们可以发现Spring中有许多init开头的方法,顾名思义,这些方法就是为Spring初始化做准备的。通过其继承关系,我们可以在其父类中找到最初的init()方法。Spring 之Srping IOC运行时序图_第5张图片

我们在HttpServletBean中可以发现有一个名为initServletBean()的方法。Spring 之Srping IOC运行时序图_第6张图片

注意圈红的代码,结合我们在项目中使用Spring的时候控制台打出的日志。Spring 之Srping IOC运行时序图_第7张图片

没有任何问题,我们找到入口了。(持续更新中,,,)

---------------------------------------------------2019-06-05---------------------------------------------------------------------------------------

入口已经找到,接下来慢慢抽丝剥茧揭开神秘的IOC容器的“面纱”

在initservletBean方法中,我们可以发现调用了initWebApplicationContext方法,我们来看这个方法

Spring 之Srping IOC运行时序图_第8张图片Spring 之Srping IOC运行时序图_第9张图片

有一个方法叫作configureAndRefreshWebApplicationContextSpring 之Srping IOC运行时序图_第10张图片

在此方法中调用了refresh()方法,我们可以简单理解为,在Spring启动过程中会调用refresh方法。这个时候让我们在这个方法上多加点注意力。

IOC容器初始化的流程

容器启动的过程大概可以概括为三个步骤定位、加载和注册。即定位我们的配置文件,加载配置文件和根据配置文件进行注册

以ApplicationContext为例,我们可以在main中启动对xml文件的加载。以此来帮助我们去认识IOC容器。

Spring 之Srping IOC运行时序图_第11张图片

Spring 之Srping IOC运行时序图_第12张图片

通过对其构造方法的跟踪,我们发现调用了refresh()方法,也就是我们时序图的起点。通过setConfigLocations方法我们也可以发现,配置文件通过字符串数组的形式进行传递。这里可以作为我们学习IOC容器的起点,即,定位配置文件。

根据时序图我们可以一步一步去学习认识IOC容器的初始化过程。

2019-06-08:更为详细的IOC运行时序图

Spring 之Srping IOC运行时序图_第13张图片

你可能感兴趣的:(Spring)