Spring IOC的初始化过程——基于XML配置(二)

前言:Spring IOC的初始化过程——基于XML配置(一)中,通过对Spring源码的调试,大致清楚其IOC的初始化过程,这里对IOC初始化过程中调用的关键函数进行总结。

注:截图中标记出了函数的所属类,也就是具体调用的哪个类中的函数,因为Spring的继承体系很大,标记出具体类,有助于理解。


IOC初始化

1.设置xml配置文件

2.核心函数refresh()

3.创建BeanFactory

注:

①在obtainFreshBeanFactory()函数中,实际调用AbstractRefreshableApplicationContext中的refreshBeanFactory()进行BeanFactory的创建。

②通过AbstractRefreshableApplicationContext中的DefaultListableBeanFactory beanFactory = createBeanFactory();创建BeanFactory。

4.解析xml文件,注册Bean

该过程为IOC初始化的核心:将xml文件中的标签的元素解析出来,然后注册到BeanFactory中。

#1.在loadBeanDefinitions函数中,创建XmlBeanDefinitionReader

#2.处理xml配置文件。

#3.处理Resource。

#4.实际操作函数:doLoadBeanDefinitions

#5.处理xml的每个元素,DefaultBeanDefinitionDocumentReader中的parseDefaultElement函数。

根据标签类型进行不同处理。

#6.进行bean的注册。

至此,IOC的Bean的注册过程走完,回归一下主要流程:

①设置xml文件资源。

②创建BeanFactory。

③解析Resource,创建BeanDefinition,最后在DefaultListableBeanFactory中完成对bean的注册。

依赖注入

在IOC容器初始化完成后,如果bean没有设置lazy-init(延迟加载)属性,那么bean的实例就会进行初始化,并通过反射完成对bean实例的创建。

1.bean初始化接口

注:具体实例化入口为preInstantiateSingletons

2.具体bean创建接口

注意这里返回的是一个BeanWrapper

3.实际实例化bean接口,函数中是利用反射进行bean的实例化

通过反射实例化对象。

4.属性赋值

注:使用applyPropertyValues函数对类的属性进行赋值操作。

最后进行实例化操作:initializeBean函数。

至此,基于XML配置文件的IOC初始化和依赖注入过程中的关键函数总结完毕。


by Shawn Chen,2018.6.11日,上午。


相关内容

Spring IOC的初始化过程——基于XML配置(一)

猜你喜欢

转载自www.cnblogs.com/morewindows0/p/9164796.html