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

Posted morewindows0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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配置(一)


以上是关于Spring IOC的初始化过程——基于XML配置的主要内容,如果未能解决你的问题,请参考以下文章

初探Spring------Spring IOC:初始化过程---Resource定位

Spring IOC 相关配置-总结

Spring IOC基于XML容器的初始化(中)

Spring IOC基于XML容器的初始化(上)

Spring IOC基于XML容器的初始化(下)

基于Annotation的IOC 初始化