现在的位置: 首页 > 综合 > 正文

Spring 的Refresh()

2017年08月08日 ⁄ 综合 ⁄ 共 1134字 ⁄ 字号 评论关闭
public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			// 容器启动的预先准备,记录容器启动的时间和标记
			prepareRefresh();

			// 创建BeanFactory,如果已有就销毁,没有就创建。此类实现了对BeanDefinition的装载
			ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

			// 配置BeanFactory标准上下文特性,如类装载器,PostProcesser等
			prepareBeanFactory(beanFactory);

			try {
				// 在bean被装载后,提供一个修改BeanFactory的入口
				postProcessBeanFactory(beanFactory);

				// 调用postProcessBeanFactory
				invokeBeanFactoryPostProcessors(beanFactory);

				// 注册用于拦截bean创建过程中的BeanPostProcessors
				registerBeanPostProcessors(beanFactory);

				// Initialize message source for this context.
				initMessageSource();

				// Initialize event multicaster for this context.
				initApplicationEventMulticaster();

				// Initialize other special beans in specific context subclasses.
				onRefresh();

				// 注册监听器
				registerListeners();

				// 完成容器的初始化,里面的preInstantiateSingletons()完成对单例对象的创建
				finishBeanFactoryInitialization(beanFactory);

				// Last step: publish corresponding event.
				finishRefresh();
			}

			catch (BeansException ex) {
				// Destroy already created singletons to avoid dangling resources.
				beanFactory.destroySingletons();

				// Reset 'active' flag.
				cancelRefresh(ex);

				// Propagate exception to caller.
				throw ex;
			}
		}
	}

抱歉!评论已关闭.