广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring中的refresh方法分析
  • 239
分享到

Spring中的refresh方法分析

2024-04-02 19:04:59 239人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1 前言2 源码入口哪里找3 refresh 核心方法4 总结1 前言 在项目开发和面试过程中 spring 都是非常重要的,在前文中已经讲述了Spring&

1 前言

项目开发面试过程中 spring 都是非常重要的,在前文中已经讲述了Spring BeanFactory 与 FactoryBean 的区别,在后续的文章中将继续更新 Spring 源码心得。了解原理性的一些内容之后就会在应用能够得心应手,在项目开发和面试中,就能很好地 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 个方法:

  • prepareRefresh() 刷新前的预处理,调用 initPropertySources() 方法初始化一些属性设置,调用 getEnvironment().validateRequiredProperties() 校验属性的合法性,设置 earlyApplicationEvents= new LinkedHashSet() 保存容器中较早期的事件。
  • obtainFreshBeanFactory() 获取 BeanFactory,创建一个刷新的 Bean 工厂,refreshBeanFactory() 并设置容器 ID,然后将创建的 DefaultListableBeanFactory 的对象进行返回。
  • prepareBeanFactory(beanFactory) BeanFactory 的预准备工作,设置 BeanFactory 的类加载器和表达式解析器,并添加 BeanPostProcessor【ApplicationContextAwareProcessor】,设置自动装配的接口,添加 BeanPostProcessor。
  • postProcessBeanFactory(beanFactory) BeanFactory 准备工作完成后进行的后置处理工作,子类通过重写这个方法来做进一步的设置。
  • invokeBeanFactoryPostProcessors(beanFactory) 执行 BeanFactoryPostProcessor 和 BeanFactory 方法的后置处理器。在 BeanFactory 标准初始化之后执行 BeanFactoryPostProcessor 和 BeanDefinitionReGIStryPostProcessor。先执行 BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry 方法,按照 PriorityOrdered 、Ordered 和其它未设置优先级来执行,然后按照同样的优先级来执行 BeanFactoryPostProcessor.postProcessBeanFactory 方法。
  • registerBeanPostProcessors(beanFactory) 注册 BeanPostProcessor(Bean 的后置处理器),不同接口类型的 BeanPostProcessor 在 Bean 创建前后的执行时机是不一样的。
  • initMessageSource() 初始化 MessageSource 组件, 做国际化功能、消息绑定、消息解析等。
  • initApplicationEventMulticaster() 初始化事件派发器,如果容器中没有事件派发器,那么就创建一个 SimpleApplicationEventMulticaster 并添加到容器中。
  • onRefresh() 留给子容器(子类),例如在 springboot 中,用来创建 tomcat、jetty 容器并启动。
  • 10 registerListeners() 给容器中将所有项目里面的 ApplicationListener 注册进来,并将监听器注册到事件派发器中。
  • 11 finishBeanFactoryInitialization(beanFactory) 初始化所有剩下的单实例 bean,这个方法是核心方法,在后续的主要流程中会详细讲解。
  • 12 finishRefresh()完成 BeanFactory 的初始化创建工作,ioc 容器就创建完成。

4 总结

在本文中,讲述了 Spring 容器启动的核心方法 refresh, 介绍了主要的启动流程方法

以上就是Spring中的refresh方法分析的详细内容,更多关于spring refresh 方法的资料请关注编程网其它相关文章!

--结束END--

本文标题: Spring中的refresh方法分析

本文链接: https://www.lsjlt.com/news/147914.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring中的refresh方法分析
    目录1 前言2 源码入口哪里找3 refresh 核心方法4 总结1 前言 在项目开发和面试过程中 spring 都是非常重要的,在前文中已经讲述了Spring&...
    99+
    2022-11-13
  • Spring refresh()源码分析
    今天小编给大家分享一下Spring refresh()源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正文p...
    99+
    2023-07-05
  • Spring中的refresh方法怎么用
    这篇文章主要介绍“Spring中的refresh方法怎么用”,在日常操作中,相信很多人在Spring中的refresh方法怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring中的refresh方法...
    99+
    2023-06-30
  • Spring中refresh()方法有什么用
    这篇文章将为大家详细讲解有关Spring中refresh()方法有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题...
    99+
    2023-05-30
    spring
  • Spring 容器初始化 register 与 refresh方法
    目录register方法refresh 方法1、prepareRefresh2、obtainFreshBeanFactory3、prepareBeanFactory4、postPro...
    99+
    2022-11-13
  • Spring容器初始化register与refresh方法是什么
    这篇文章主要讲解了“Spring容器初始化register与refresh方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring容器初始化register与refresh方法是...
    99+
    2023-07-02
  • EasyUI 的Window窗口refresh方法
    EasyUI中的Window窗口组件没有提供refresh方法。如果需要刷新Window窗口内容,可以使用以下两种方法:1. 使用l...
    99+
    2023-09-08
    EasyUI
  • Bootstrap table中toolbar新增条件查询及refresh参数使用方法的示例分析
    这篇文章将为大家详细讲解有关Bootstrap table中toolbar新增条件查询及refresh参数使用方法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。...
    99+
    2022-10-19
  • JavaSpring的refresh方法你知道吗
    目录spring的refresh方法前置知识创建 Bean 容器前的准备工作创建 Bean 容器,加载并注册 Bean总结spring的refresh方法 前置知识 方法入口 // ...
    99+
    2022-11-13
  • Spring源码解析之推断构造方法的示例分析
    小编给大家分享一下Spring源码解析之推断构造方法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring推断构造方法贴个测试代码直接开干,这只是个...
    99+
    2023-06-15
  • @ComponentScan在spring中无效的原因分析以及解决方法
    这篇文章将为大家详细讲解有关@ComponentScan在spring中无效的原因分析以及解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。@ComponentScan在spring中无...
    99+
    2023-06-25
  • Java中的SimpleDateFormat方法分析
    Java中的SimpleDateFormat方法分析 先进行专栏介绍SimpleDateFormat方法分析 常用方法构造方法格式化(从Date到String)举例分析 解析(从String到Date)举例分析 ...
    99+
    2023-08-16
    java 开发语言
  • Spring Boot配置方式的示例分析
    这篇文章给大家分享的是有关Spring Boot配置方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配...
    99+
    2023-05-30
    spring boot
  • Spring invokeBeanFactoryPostProcessors方法刨析源码
    概述 invokeBeanFactoryPostProcessor方法是spring核心方法之一,主要用来调用beanFactory后置处理器来修改beanDefinition。 该...
    99+
    2023-01-13
    Spring invokeBeanFactoryPostProcessors Spring invokeBeanFactoryPostProcessors方法
  • Java中方法的示例分析
    这篇文章给大家分享的是有关Java中方法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是方法例如:System.out.println();其结构为-->类.对象.方法;其含义为-->调...
    99+
    2023-06-20
  • easyui window refresh 刷新两次的解决方法
    刷新两次的问题可能是因为在刷新时触发了两次刷新事件。以下是解决该问题的一种方法:1. 在刷新事件之前,先移除原有的刷新事件监听器。```javascript$('#window').window({onBeforeRefresh: fu...
    99+
    2023-08-09
    解决方法
  • Spring的示例分析
    这篇文章将为大家详细讲解有关Spring的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。WHY在诞生之初,创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB。相对于E...
    99+
    2023-05-30
    spring
  • spring Kafka中的@KafkaListener源码分析
    本篇内容主要讲解“spring Kafka中的@KafkaListener源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spring Kafka中的@KafkaListener源码分析”...
    99+
    2023-07-05
  • Java中Spring Boot的示例分析
    这篇文章主要介绍Java中Spring Boot的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 什么是 Spring Boot?Spring Boot 是为 Spring 服务的,是用来简化新 Spri...
    99+
    2023-06-20
  • spring初始化方法的执行顺序及其原理分析
    目录Spring中初始化方法的执行顺序首先通过一个例子来看其顺序配置我们进入这个类看我们看到了annotation-config了我们重点看下这行代码我们直接看initializeB...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作