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配置的主要内容,如果未能解决你的问题,请参考以下文章