public void refresh() throws BeansException, IllegalStateException { synchronized(this.startupShutdownMonitor) { StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh");
// 初始化(记录容器开始时间、初始化一些集合) this.prepareRefresh();
// 创建beanFactory,旧beanFactory存在就会销毁
// XmlBeanDefinitionReader 读配置,加载配置到bean工厂
ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
//给beanFactory设置一些属性值 this.prepareBeanFactory(beanFactory); try {
//留给子类拓展使用 this.postProcessBeanFactory(beanFactory); StartupStep beanPostProcess = this.applicationStartup.start("spring.context.beans.post-process");
//实例化,并调用所有已注册的beanFactoryPostProcessor this.invokeBeanFactoryPostProcessors(beanFactory); this.registerBeanPostProcessors(beanFactory); beanPostProcess.end();
//初始化一些消息源 this.initMessageSource();
//初始化时间多播器 this.initApplicationEventMulticaster(); this.onRefresh();
//注册监听器 this.registerListeners();
//初始化所有剩余实例 this.finishBeanFactoryInitialization(beanFactory);
//清理缓存,发布事件等 this.finishRefresh(); } catch (BeansException var10) { if (this.logger.isWarnEnabled()) { this.logger.warn("Exception encountered during context initialization - cancelling refresh attempt: " + var10); } this.destroyBeans(); this.cancelRefresh(var10); throw var10; } finally { this.resetCommonCaches(); contextRefresh.end(); } } }
标签:初始化,beanFactory,Spring,refresh,源码,var10,context,解析 From: https://www.cnblogs.com/zhougongjin/p/17071049.html