码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-11 13:47:59      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:流程   就是   reader   bubuko   ica   ctr   inf   回归   one   

前言: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配置(二)

标签:流程   就是   reader   bubuko   ica   ctr   inf   回归   one   

原文地址:https://www.cnblogs.com/morewindows0/p/9164796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!