iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring懒加载的单例Bean获取过程是怎样的
  • 692
分享到

Spring懒加载的单例Bean获取过程是怎样的

2023-06-02 14:06:02 692人浏览 薄情痞子
摘要

这篇文章主要讲解了“spring懒加载的单例Bean获取过程是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring懒加载的单例Bean获取过程是怎样的”吧!前言xml的读取应该是

这篇文章主要讲解了“spring懒加载的单例Bean获取过程是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring懒加载的单例Bean获取过程是怎样的”吧!

前言

xml的读取应该是Spring的重要功能,因为Spring的大部分功能都是以配置做为切入点的。

   我们在静态代码块中读取配置文件可以这样做:
   //这样来加载配置文件       XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
   (1)XmlBeanFactory 继承 AbstractBeanDefinitionReader ,使用ResourceLoader 将资源文件路径转换为对应的Resource文件。   (2)通过DocumentLoader 对 Resource 文件进行转换,将 Resource 文件转换为 Document 文件。   (3)通过实现接口 BeanDefinitionDocumentReader 的 DefaultBeanDefinitionDocumentReader 类对Document 进行解析,并且使用 BeanDefinitionParserDelegate对Element进行解析。

step1:

Spring懒加载的单例Bean获取过程是怎样的

 在平常开发中,我们也可以使用Resource 获取 资源文件:
  Resource resource = new ClassPathResource("application.xml");  InputStream in = resource.getInputStream();

step2:

Spring懒加载的单例Bean获取过程是怎样的

  在资源实现加载之前,调用了 super(parentBeanFactory) --    调用XmlBeanDefinitionReader 的 loadBeanDefinitions()方法进行加载资源:  (1) 对Resource资源进行编码  (2) 通过SAX读取XML文件来创建InputSource对象  (3) 核心处理

Spring懒加载的单例Bean获取过程是怎样的

   可以很直观的看出来是这个function是在解析xml文件从而获得对应的Document对象。

Spring懒加载的单例Bean获取过程是怎样的

  在doLoadDocument方法里面还存一个方法getValidationModeForResource()用来读取xml的验证模式。(和我关心的没什么关系,暂时不看了~)  转换成document也是最常用的方法: ![869effccb2e4f7b69e0b53D17fe0a2b50044d61b](https://oss-cn-hangzhou.aliyuncs.com/yqfiles/869effccb2e4f7b69e0b53d17fe0a2b50044d61b.png)

step3 : 我们已经step by step 的看到了如何将xml文件转换成Document的,现在就要分析是如何提取和注册bean的。

        

Spring懒加载的单例Bean获取过程是怎样的

参数doc是doLoadBeanDefinitions()方法传进来的  loadDocument 加载过来的。这边就很好的体现出了面向对象的单一全责原则,将逻辑处理委托給单一的类去处理。

在这边单一逻辑处理类是:  BeanDefinitionDocumentReader

核心方法:  documentReader.reGISterBeanDefinitions(doc, createReaderContext(resource));

Spring懒加载的单例Bean获取过程是怎样的开始解析:Spring懒加载的单例Bean获取过程是怎样的


在Spring的xml配置中有两种方式来声明bean:

 一种是默认的:  <bean id = " " class = " " /> 还有一种是自定义的:  < tx : annotation-driven / >

Spring懒加载的单例Bean获取过程是怎样的

通过xml配置文件的默认配置空间来判断:Http://www.springframework.org/schema/beans

对于默认标签的解析:

Spring懒加载的单例Bean获取过程是怎样的

对Bean 配置的解析:

Spring懒加载的单例Bean获取过程是怎样的

BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele);  返回BeanDefinitionHolder

Spring懒加载的单例Bean获取过程是怎样的

Spring懒加载的单例Bean获取过程是怎样的

这边代码大致看下来:

  1. 提取元素中的id和name属性

  2. 进一步解析将其他属性封装到 BeanDefinition 的实现类中

  3. 如果没有指定beanName 变使用默认规则生成beanName

  4. 封装类BeanDefinitionHolder

可以先了解一下  BeanDefinition  这个类的作用。

  BeanDefinition是一个接口,对应着配置文件中<bean>里面的所有配置,在Spring中存在着三个实现类:

Spring懒加载的单例Bean获取过程是怎样的

  在配置文件中,可以定义父<bean>和子<bean>,父<bean>是用RootDefinition来表示,子<bean>是用ChildBeanDefinition来表示。  Spring 通过BeanDefiniton将配置文件中的<bean>配置信息转换为容器内部表示,并且将这些BeanDefinition注册到BeanDefinitonRegistry中。

Spring容器的BeanDefinitonRegistry就像是Spring配置信息的内存数据库,主要是以map的形式保存的。

 因此解析属性首先要创建用于承载属性的实例:

Spring懒加载的单例Bean获取过程是怎样的

然后就是各种对属性的解析的具体方法:

Spring懒加载的单例Bean获取过程是怎样的

感谢各位的阅读,以上就是“Spring懒加载的单例Bean获取过程是怎样的”的内容了,经过本文的学习后,相信大家对Spring懒加载的单例Bean获取过程是怎样的这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Spring懒加载的单例Bean获取过程是怎样的

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

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

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

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

下载Word文档
猜你喜欢
  • Spring懒加载的单例Bean获取过程是怎样的
    这篇文章主要讲解了“Spring懒加载的单例Bean获取过程是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring懒加载的单例Bean获取过程是怎样的”吧!前言xml的读取应该是...
    99+
    2023-06-02
  • Spring源码剖析3:懒加载的单例Bean获取过程分析
    spring ioc 容器的加载流程...
    99+
    2023-06-02
  • Spring获取Bean的过程是怎样的
    这篇文章主要讲解了“Spring获取Bean的过程是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring获取Bean的过程是怎样的”吧!原型Bean加载过程之前的文章,分析了非懒...
    99+
    2023-06-02
  • Spring IOC容器的加载过程是怎样的
    本篇内容介绍了“Spring IOC容器的加载过程是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring ioc 容器的加载流程...
    99+
    2023-06-02
  • 详解Spring简单容器中的Bean基本加载过程
    本篇将对定义在 XMl 文件中的 bean,从静态的的定义到变成可以使用的对象的过程,即 bean 的加载和获取的过程进行一个整体的了解,不去深究,点到为止,只求对 Spring IOC 的实现过程有一个整体的感知,具体实现细节留到后面用针...
    99+
    2023-05-31
    spring bean 加载
  • JVM类加载过程是怎样的
    小编给大家分享一下JVM类加载过程是怎样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机...
    99+
    2023-06-02
  • Java类的加载过程是怎样的
    这篇文章主要讲解了“Java类的加载过程是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java类的加载过程是怎样的”吧!  一、加载  在加载阶段,虚拟机主要完成三件事:  1.通过...
    99+
    2023-06-02
  • Spring ApplicationContext加载过程的示例分析
    这篇文章给大家分享的是有关Spring ApplicationContext加载过程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、找准入口,使用ClassPathXmlApplicationCont...
    99+
    2023-06-14
  • Java IDE 在 Linux 上的加载过程是怎样的?
    Java IDE 是 Java 集成开发环境的缩写,主要用于开发和调试 Java 应用程序。在 Linux 上使用 Java IDE,需要了解其加载过程。 Java IDE 的加载过程分为以下三个步骤: 安装 JDK 在 Linux ...
    99+
    2023-09-09
    ide load linux
  • Kubernetes中Nginx配置热加载的过程是怎样的
    Kubernetes中Nginx配置热加载的过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言Nginx本身是支持热更新的,通过nginx -s r...
    99+
    2023-06-26
  • SpringBoot配置热加载工具devtools的过程是怎样的
    SpringBoot配置热加载工具devtools的过程是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、devtools原理介绍spring-boot-devto...
    99+
    2023-06-15
  • Spring Security过滤器链加载执行流程的示例分析
    这篇文章主要介绍Spring Security过滤器链加载执行流程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Spring Security实现原理Spring Security 采用 IoC ...
    99+
    2023-06-22
  • vue-router懒加载下载js的过程中添加loading提示避免无响应怎么解决
    今天小编给大家分享一下vue-router懒加载下载js的过程中添加loading提示避免无响应怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,...
    99+
    2023-07-04
  • 为vue-router懒加载时下载js的过程中添加loading提示避免无响应怎么办
    这篇文章给大家分享的是有关为vue-router懒加载时下载js的过程中添加loading提示避免无响应怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用过vue-route...
    99+
    2024-04-02
  • spring cloud中common-service的项目构建过程的是怎样的
    spring cloud中common-service的项目构建过程的是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先在构建spring cloud的common...
    99+
    2023-06-05
  • SAP 基于采购订单的MIRO校验过程是怎样的
    SAP 基于采购订单的MIRO校验过程是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、介绍发票校验是物料管理(MM)系统的一部分。它提供物料管理部分和财务会计, ...
    99+
    2023-06-05
  • XP系统下手动加载Q77芯片组的AHCI驱动安装过程是怎样的
    这期内容当中小编将会给大家带来有关XP系统下手动加载Q77芯片组的AHCI驱动安装过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  故障现象:  主机Q77芯片组主板,已经在IDE硬盘模式下安...
    99+
    2023-06-14
  • PyTorch简单手写数字识别的实现过程是怎样的
    本篇文章给大家分享的是有关PyTorch简单手写数字识别的实现过程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、包导入及所需数据的下载torchvision包的主要...
    99+
    2023-06-25
  • Centos7上卸载MariaDB数据库并安装mysql的过程是怎样的
    这篇文章给大家介绍Centos7上卸载MariaDB数据库并安装mysql的过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。(1) 列出所有被安装的rpm package#&...
    99+
    2024-04-02
  • 滑轮滚动到页面底部ajax加载数据配合jsonp实现过程是怎样的
    这期内容当中小编将会给大家带来有关滑轮滚动到页面底部ajax加载数据配合jsonp实现过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作