spring架构分析(二)

1、从FileSystemAppllicationContext分析Spring对IOC容器的初始化过程

其类继承体系如下:

 通常会调用refresh() 方法,它是IOC容器才初始化的入口。首先会去获取一个beanFactory,实际上为DefaultListableBeanFactory。它持有beanDefinitionMap,里面存储上一节提到的BeanDefinition,同时还有beanDefinitionNames、singletonObjects(用来存储实例化后的单实例对象)等对象。在此之前,还有很重要的一步,是调用refreshBeanFactory()方法,用来根据指定的路径找到resource文件,然后读取文件转换成spring的内部结构BeanDefinition,并且以key-value的形式存入到beanDefinitionMap,用来提供给后续实例化bean时使用。通过debug一下spring源代码里面的测试实例类WebApplicationContextScopeTests,便可以一目了然。如下图:



获取到beanFactory以后会进行一系列的预处理,包括context's class loader、MessageSource registered、post-processing等。重点在于finishBeanFactoryInitialization(beanFactory)方法,它会去实例化单实例、非延迟加载(spring 默认bean配置)的bean。首先会去beanDefinitionMap获取bean定义,然后调用getBean(beanName)去实例化bean,并将它放到DefaultListableBeanFactory的singletonObjects(map)中去。

整个IOC容器的初始化,大致是这个流程,具体spring还会支持各种属性配置,以及初始化前后支持的各种操作等。通过debug源代码,可以针对想要了解的细节及模块研究其实现原理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值