Spring源码解析
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(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律