Spring中的refresh方法怎么用(refresh,spring,开发技术)

时间:2024-05-10 10:47:17 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

1 前言

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

2 源码入口哪里找

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

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

#通过配置文件来读取ClassPathXmlApplicationContextct=newClassPathXmlApplicationContext("bean.xml");#通过配置类来加载AnnotationConfigApplicationContextct=newAnnotationConfigApplicationContext(MainConfig.class);#两者都是AbstractApplicationContext的子类AbstractApplicationContext

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

Spring中的refresh方法怎么用

3 refresh 核心方法

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

Spring中的refresh方法怎么用

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

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

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

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

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

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

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

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

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

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

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

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

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

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Spring中的refresh方法怎么用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:react中的switch怎么用下一篇:

20 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18