千家信息网

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

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"Spring懒加载的单例Bean获取过程是怎样的",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spring懒加载的单例Bean获取
千家信息网最后更新 2025年11月07日Spring懒加载的单例Bean获取过程是怎样的

这篇文章主要讲解了"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:

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

step2:

  在资源实现加载之前,调用了 super(parentBeanFactory) --  /**Ignore the given dependency interface for autowiring.(忽略接口的自动装配功能)*/  调用XmlBeanDefinitionReader 的 loadBeanDefinitions()方法进行加载资源:  (1) 对Resource资源进行编码  (2) 通过SAX读取XML文件来创建InputSource对象  (3) 核心处理

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

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

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

        /**Register the bean definitions contained in the given DOM document*/

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

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

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

开始解析:


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

 一种是默认的:   还有一种是自定义的:  < tx : annotation-driven / >

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

对于默认标签的解析:

对Bean 配置的解析:

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

这边代码大致看下来:

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

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

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

  4. 封装类BeanDefinitionHolder

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

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

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

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

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

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

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

文件 配置 方法 属性 资源 过程 处理 功能 对象 接口 学习 代码 信息 内容 容器 就是 核心 逻辑 封装 验证 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全 双一流学科 数据爬取与数据存入数据库 咸鱼之王终身卡各服务器通用吗 数据库外键 用整型还是字符 服务器安全配置与管理 数据库隐藏的查询方法 数据库技术开题报告范文 育碧在中国有服务器吗 网络安全常用的保密措施包括 数据库原理及应用微课视频 绍兴银行 软件开发招聘 龙芯服务器管理教程 单位网络安全培训试题 软件开发外包两年后被发现 车流量预测数据库 澳门虚拟服务器管理软件 联通网络安全专业怎么样 广东网络安全应急平台 ai网络安全创业公司 网络安全管理指导组 怎么进入服务器版我的世界 网络安全岗位入职要求 花亦山心之月安卓服务器 手机无法与谷歌服务器通信怎么办 头歌数据库第六章实训作业答案 首次举办网络安全宣传周报道 数据库Kindnum的意思 好玩的基岩版小游戏服务器ip 文件管理器访问服务器 服务器ip地址是lp有哪些
0