试读Spring源码(一)Spring容器初始化AbstractApplicationContext的refresh方法

Spring容器的初始化是定义在AbstractApplicationContext的refresh方法中。首先是避免多线程同时初始化,先对初始化过程加锁。prepareRefresh方法,是容器初始化之前的准备,记录容器初始化的时间,并初始化一些参数。

ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 从这里开始,是获取容器需要的BeanFactory。obtainFreshBeanFactory是初始化BeanFactory,并返回初始化后的BeanFactory,具体实现是在AbstractRefreshableApplicationContext这个类的refreshBeanFactory 方法,主要的步骤有:

(1)直接创建一个DefaultListableBeanFactory

(2)客制化创建的BeanFactory,在这里做了两步,1是设置是否允许覆盖BeanDefinition;2是设置是否允许循环引用。

(3)加载BeanDefinition,这个步骤会被ApplicationContext的子类重写,如XmlWebApplicationContext。DefaultListableBeanFactory实现了BeanDefinitionRegistry接口,用于注册加载好的BeanDefinition。

(4)创建好BeanFactory后,prepareBeanFactory方法继续对BeanFactory初始化,主要做的工作有设置类加载器;设置BeanExpressionResolver以支持EL;设置PropertyEditorRegistrar;注册ApplicationContextAwareProcessor后置处理器(该后置处理器主要是用于设置Bean所需要获取的ApplicationContext的属性,也是在这里可以为bean注入ApplicationContext);注册需要忽视的接口和注册部分依赖;再注册一个后置处理器ApplicationListenerDetector(具体作用不清楚);最后再注册一些环境Bean用于ApplicationContext。

postProcessBeanFactory方法根据注释是在BeanFactory初始化后允许子类做进一步的处理,默认实现为空。

invokeBeanFactoryPostProcessors方法是注册BeanFactoryPostProcessor,并调用,具体还不清楚。

registerBeanPostProcessors方法是实例化实现了BeanPostProcessor接口的Bean,并将其注册到BeanFactory。

initMessageSource方法是初始化信息,用以支持国际化。

initApplicationEventMulticaster、onRefresh、registerListeners、finishBeanFactoryInitialization、finishRefresh等方法,目前还不熟悉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值