IoC容器初始化过程

本文主要摘录于  Spring技术内幕-深入即系Spring架构和设计原理(许文柯著)。

IoC容器的初始化包括BeanDefinition的Resource定位、载入和注册三个基本过程。

一、BeanDefinition的Resource定位

 还是以FileSystemXmlApplicationContext为例,上图表示了它的继承关系,可以看出它间接继承了DefaultResourceLoader类,因此具备了ResourceLoader读入以Resource定义的BeanDefinition的能力。IoC容器的初始化是从它的构造函数中的refresh方法开始的。

refresh方法调用AbstractRefreshableApplicationContext里的refreshBeanFactory方法,通过createBeanFactory构建了一个IoC容器供ApplicationContext使用,这个容器其实就是DefaultListableBeanFactory。同时启动loadBeanDefinitions来载入BeanDefinition,在AbstractBeanDefinitionReader里面找到合适的ResourceLoader解析Resource。这就是BeanDefinition的Resource定位。

二、BeanDefinition的载入和解析

 上文中说到AbstractRefreshableApplicationContext类中refreshBeanFactory方法,启动loadBeanDefinitions来载入BeanDefinition,第一步获得XmlBeanDefinitionReader对象,然后再调用loadBeanDefinitions方法,源码如下:

实际上就是通过XmlBeanDefinitionReader对象去载入和解析BeanDefinition,最后通过BeanDefinitionParserDelegate去解析XML。这个时候容器还没有完全起作用,最后还需完成数据向容器的注册。

三、BeanDefinition在IoC容器中的注册

跟踪代码,注册其实就是调用DefaultListableBeanFactory里面的registerBeanDefinition方法,本质上是通过HashMap来持有载入的BeanDefinition,即DefaultListableBeanFactory中的beanDefinitionMap。完成了BeanDefinition的注册,就完成了IoC容器的初始化过程。此时,在使用的IoC容器DefaultListableBeanFactory中已经建立了整个Bean的配置信息,而且这些BeanDefinition已经可以被容器使用了。容器的作用就是对这些信息进行处理和维护,这些信息是容器建立依赖反转的基础。

转载于:https://www.cnblogs.com/rayallenbj/p/9527114.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值