千家信息网

Spring中的refresh方法怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"Spring中的refresh方法怎么用",在日常操作中,相信很多人在Spring中的refresh方法怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年11月01日Spring中的refresh方法怎么用

这篇文章主要介绍"Spring中的refresh方法怎么用",在日常操作中,相信很多人在Spring中的refresh方法怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Spring中的refresh方法怎么用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1 前言

了解原理性的一些内容之后就会在应用能够得心应手,在项目开发和面试中,就能很好地 battle 和 show muscle。

2 源码入口哪里找

Spring 的源码阅读,需要找到入口文件,一般情况下在 Spring 项目中,由 tomcat 容器启动后加载项目中设置的 web.xml,在改文件中添加项目的配置文件,监听器等内容,其中 DispatcherServlet 尤为重要,其 onRefresh 方法就是其核心操作。不过随着 springboot 的诞生,配置化的思想成型后,获取源码的入口就相对简单了,核心需要关注 AbstractApplicationContext.refresh。

获取方法的入口常见的如下所示:

# 通过配置文件来读取ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("bean.xml");# 通过配置类来加载AnnotationConfigApplicationContext ct = new AnnotationConfigApplicationContext(MainConfig.class);# 两者都是AbstractApplicationContext 的子类AbstractApplicationContext

如下图所示,通过配置文件来加载的 ClassPathXmlApplicationContext 是在构造方法中调用了其父类的 refresh 方法,这个方法就是核心,就是大家都知道的 AbstractApplicationContext.refresh() 。

3 refresh 核心方法

关于源码的阅读,因其复杂的文件结构,在梳理其结构时,需要抓大放小,不宜深入细节,否则就容易迷路,不记得来时的路了。下图便是核心方法 AbstractApplicationContext.refresh

对于 refresh 方法主要分为以下核心的 12 个方法:

  • 1 prepareRefresh() 刷新前的预处理,调用 initPropertySources() 方法初始化一些属性设置,调用 getEnvironment().validateRequiredProperties() 校验属性的合法性,设置 earlyApplicationEvents= new LinkedHashSet() 保存容器中较早期的事件。

  • 2 obtainFreshBeanFactory() 获取 BeanFactory,创建一个刷新的 Bean 工厂,refreshBeanFactory() 并设置容器 ID,然后将创建的 DefaultListableBeanFactory 的对象进行返回。

  • 3 prepareBeanFactory(beanFactory) BeanFactory 的预准备工作,设置 BeanFactory 的类加载器和表达式解析器,并添加 BeanPostProcessor【ApplicationContextAwareProcessor】,设置自动装配的接口,添加 BeanPostProcessor。

  • 4 postProcessBeanFactory(beanFactory) BeanFactory 准备工作完成后进行的后置处理工作,子类通过重写这个方法来做进一步的设置。

  • 5 invokeBeanFactoryPostProcessors(beanFactory) 执行 BeanFactoryPostProcessor 和 BeanFactory 方法的后置处理器。在 BeanFactory 标准初始化之后执行 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor。先执行 BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry 方法,按照 PriorityOrdered 、Ordered 和其它未设置优先级来执行,然后按照同样的优先级来执行 BeanFactoryPostProcessor.postProcessBeanFactory 方法。

  • 6 registerBeanPostProcessors(beanFactory) 注册 BeanPostProcessor(Bean 的后置处理器),不同接口类型的 BeanPostProcessor 在 Bean 创建前后的执行时机是不一样的。

  • 7 initMessageSource() 初始化 MessageSource 组件, 做国际化功能、消息绑定、消息解析等。

  • 8 initApplicationEventMulticaster() 初始化事件派发器,如果容器中没有事件派发器,那么就创建一个 SimpleApplicationEventMulticaster 并添加到容器中。

  • 9 onRefresh() 留给子容器(子类),例如在 springboot 中,用来创建 tomcat、jetty 容器并启动。

  • 10 registerListeners() 给容器中将所有项目里面的 ApplicationListener 注册进来,并将监听器注册到事件派发器中。

  • 11 finishBeanFactoryInitialization(beanFactory) 初始化所有剩下的单实例 bean,这个方法是核心方法,在后续的主要流程中会详细讲解。

  • 12 finishRefresh()完成 BeanFactory 的初始化创建工作,IOC 容器就创建完成。

到此,关于"Spring中的refresh方法怎么用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

方法 容器 核心 文件 项目 配置 事件 入口 源码 学习 工作 子类 就是 处理 优先级 内容 处理器 属性 接口 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技金融是不是互联网金融 科技平台互联网 互联网品科技 互联网扶贫科技 互联网金融公司科技 碳银互联网科技 上海喔噻互联网科技 无线互联网科技 富国互联网科技创新基金 重庆互联网医院沙龙医盟信息科技 岳阳华臻互联网科技有限公司 想开互联网科技公司怎么样 佛山市拉法互联网科技有限公司 怎样加入科技互联网 皮皮虾互联网科技有限公司 上海同邻互联网科技有限公司规模 万物互联网智能科技 兰石爱特工业互联网科技分公司 玉溪新华互联网科技怎么选 数字互联网科技有限公司 手冲咖啡和咖啡机区别 科技创新与互联网经济 善班互联网科技 上海电发互联网科技有限公司 未来五年的互联网科技 中和天地互联网科技有限公司 互联网相关科技技术 半导体行业属于互联网高科技类吗 北京天晋互联网科技有限公司 互联网科技快速发展优美句子
0