工作过程
负责spring ioc、proxy 、aop 、init、event的整合
源码
AbstractApplicationContext#refresh
@Override
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// Prepare this context for refreshing.
prepareRefresh();
// Tell the subclass to refresh the internal bean factory.
//核心:告诉要使用当前模板的子类自己去初始化DefaultListableBeanFactory工厂。
//如果当前模板上下文持有DefaultListableBeanFactory工厂,
//那么就销毁当前bean并且关闭该工厂。
//如果当前模板上下文没有持有DefaultListableBeanFactory工厂,
//那么就创建当前DefaultListableBeanFactory工厂并且加载Bean的配置信息
//创建DefaultListableBeanFactory工厂过程:
//如果当前工厂持有的上下文是ConfigurableApplicationContext的实现,
//那么就使用ConfigurableApplicationContext的父类工厂,
//如果不是直接使用ApplicationContext(ApplicationContext其实就是B