之前的文章中我们介绍了Spring启动的流程,知道了Spring启动最主要就是refresh方法,接下来的文章中我会根据源码分析refresh中几个重要的方法。
一、obtainFreshBeanFactory源码分析
obtainFreshBeanFactory的源码部分在org.springframework.context.support.AbstractApplicationContext#obtainFreshBeanFactory,具体代码如下:
protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {
//关闭旧的BeanFactory(如果有),创建新的 BeanFactory,加载 Bean 定义、注册 Bean 等
this.refreshBeanFactory();
//返回上一步通过解析创建的BeanFactory
return this.getBeanFactory();
}
可以看到obtainFreshBeanFactory里面最主要的步骤就是refreshBeanFactory(),其真正的实现在org.springframework.context.support.AbstractRefreshableApplicationContext#refreshBeanFactory,其源码如下:
protected final void refreshBe