spring启动核心源码

  @Override
public void refresh() throws BeansException, IllegalStateException {
    synchronized (this.startupShutdownMonitor) {
        // Prepare this context for refreshing.
        prepareRefresh();

        // 这里是在子类中启动refreshBeanFactory()的地方
        ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

        // Prepare the bean factory for use in this context.
        prepareBeanFactory(beanFactory);

        try {
            //设置BeanFactory的后置处理
            postProcessBeanFactory(beanFactory);

            //调用BeanFactory的后处理器,这些后处理器是在Bean定义中向容器注册的
            invokeBeanFactoryPostProcessors(beanFactory);

            // Register bean processors that intercept bean creation.
            registerBeanPostProcessors(beanFactory);

            //对上下文中的消息源进行初始化
            initMessageSource();

            //初始化上下文中的事件机制
            initApplicationEventMulticaster();

            //初始化其他的特殊Bean
            onRefresh();

            //检查监听Bean并且将这些Bean向容器注册
            registerListeners();

            //实例化所有的(non-lazy-init)单件
            finishBeanFactoryInitialization(beanFactory);

            //发布容器事件,结束Refresh过程
            finishRefresh();
        }

        catch (BeansException ex) {
            logger.warn("Exception encountered during context initialization - cancelling refresh attempt", ex);

            //为防止Bean资源占用,在异常处理中,销毁已经在前面过程中生成的单件Bean
            destroyBeans();

            //重置active
            cancelRefresh(ex);

            // Propagate exception to caller.
            throw ex;
        }
    }
}
上一篇:Vue.js的main.js的示例


下一篇:[Head First设计模式]生活中学设计模式——状态模式