标签:流程 就是 reader bubuko ica ctr inf 回归 one
前言:Spring IOC的初始化过程——基于XML配置(一)中,通过对Spring源码的调试,大致清楚其IOC的初始化过程,这里对IOC初始化过程中调用的关键函数进行总结。
注:截图中标记出了函数的所属类,也就是具体调用的哪个类中的函数,因为Spring的继承体系很大,标记出具体类,有助于理解。
注:
①在obtainFreshBeanFactory()函数中,实际调用AbstractRefreshableApplicationContext中的refreshBeanFactory()进行BeanFactory的创建。
②通过AbstractRefreshableApplicationContext中的DefaultListableBeanFactory beanFactory = createBeanFactory();创建BeanFactory。
该过程为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实例的创建。
注:具体实例化入口为preInstantiateSingletons。
注意这里返回的是一个BeanWrapper。
通过反射实例化对象。
注:使用applyPropertyValues函数对类的属性进行赋值操作。
最后进行实例化操作:initializeBean函数。
至此,基于XML配置文件的IOC初始化和依赖注入过程中的关键函数总结完毕。
by Shawn Chen,2018.6.11日,上午。
标签:流程 就是 reader bubuko ica ctr inf 回归 one
原文地址:https://www.cnblogs.com/morewindows0/p/9164796.html