BeanFactory初始化

先从上图红点debug进入代码


configLoacations 指的是你的资源文件位置,此处指的就是classPath下的applicationContext.xml

refresh默认为true, parent我们没传为空。我们顺便来看看classPathxmlApplicationContext的继承关系



setConfiglocations是classPathXmlApplicationContext 调用父类AbstractRefreshableConfigApplicationContext的方法初始化自己的configurations.





接下来进入AbstractApplicationContext(抽象类)的refresh方法



今天我们主要看的就是spring如何初始化beanfactory的,红色区域已经标记出,进入obtainFreshBeanFactory这个方法

                                                                                                                                图四

obtainFreshBeanFactory这个方法里面主要有2个步骤,第一个步骤537行的refreshBeanFactory(),

                                                                                                                               图五

122~125行表示如果已经有了一个容器,先销毁里面的bean然后再关闭容器,spring保证只有一个容器,然后我们看131~133行,在线程安全的状态下,为this.beanfactory赋值,那么this.beanfactory是什么呢,就是图一红旗①标记的DefaultListableBeanFactory beanFactory,现在调用方法的顺序也如图一中用①②③这种标记已经标出,refreshBeanFactory()这个方法的最终目的就是为AbstractRefreshableApplicationContext.java中DefaultListableBeanFactory beanFactory赋值,那么127~130行就是为beanFactory初始化这个容器里面的各个组件了,我们先暂时不分析127~130行代码,回到图四中538行代码,getBeanFactory(),打开getBeanFactory()

在线程安全的情况下,返回this.beanFactory,这个beanFactory是谁呢,原来就是刚刚refreshBeanFactory()方法赋值的那个AbstractRefreshableApplicationContext.java中的DefaultListableBeanFactory beanFactory,现在一切都顺理成章了,beanfactory就是这么初始化好的,然后返回的





本质就是给AbstractRefreshableApplicationContext的beanfactory赋值 线程安全地赋值。


接下来我们看看xmlBeanDefinitionReader 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值