Spring 源码解读

news2024/12/23 3:21:20

1、Spring 的结构组成

1.1、核心类介绍

        Spring 中有两个最核心的类

  1. 1 DefaultListableBeanFactory

        XmlBeanFactory 继承自 DefaultListableBeanFactory,而DefaultListableBeanFactory 是整个 bean加载的核心部分,是 Spring 注册及加载 bean 的默认实现,而对于 XmlBeanFactory 与DefaultListableBeanFactory 不同的地方其实是在 XmlBeanFactory 中使用了自定义的XML 读取器XmlBeanDefinitionReader,实现了个性化的 BeanDefinitionReader 读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory 并实现了 CnfigurableListableBeanFactory 以及BeanDefinitionRegistry 接口。以下是 ConfigurableListableBeanFactory 的层次结构图以及相关类图。从上面的类图以及层次结构图中,我们可以很清晰地从全局角度了解 DefaultListableBeanFactory 的脉络。

  • AliasRegistry:定义对 alias 的简单增删政等操作。
  • SimpleAliasRegistry:主要使用 map 作为alias 的缓存,并对接口 AliasRegistry 进行实现。
  • SingletonBeanRegistry:定义对单例的注册及获取。
  • BeanFactory:定义获取 bean及 bean 的各种属性。
  • DefaultSingletonBeanRegistry:对接口 SingletonBeanRegistry 各函数的实现。
  • HierarchicalBeanFactory:继承 BeanFactory,也就是在 BeanFactory 定义的功能的基础上增加了对 parentFactory 的支持。
  • BeanDefinitionRegistry:定义对 BeanDefinition 的各种增删改操作。
  • FactoryBeanRegistrySupport: 在 DefaultSingletonBeanRegistry 基础上增加了对 FactoryBean的特殊处理功能。
  • ConfigurableBeanFactory:提供配置 Factory 的各种方法。
  • ListableBeanFactory:根据各种条件获取 bean 的配置清单。
  • AbstractBeanFactory:综合 FactoryBeanRegistrySupport 和 ConfigurableBeanFactory 的功能。
  • AutowireCapableBeanFactory:提供创建 bean、自动注入、初始化以及应用 bean 的后处理器。
  • AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory 并对接 Autowire CapableBeanFactory进行实现。
  • ConfigurableListableBeanFactory: BeanFactory 配置清单,指定忽略类型及接口等。
  • DefaultListableBeanFactory: 综合上面所有功能,主要是对 Bean注册后的处理。

        XmlBeanFactory对 DefaultListableBeanFactory 类进行了扩展,主要用于从XML文档中读取 BeanDefinition,对于注册及取 Bean 都是使用从父类 DefaultListableBeanFactory 继承的方法去实现,而唯独与父类不同的个性化实现就是增加了XmlBeanDefinitionReader类型的reader属性。在XmlBeanFactory 中主要使用reader 属性对资源文件进行读取和注册。


  1. 2 XmlBeanDefinitionReader

        XML配置文件的读取是 Spring 中重要的功能,因 Spring 的大部分能都是以配置作为切人点的,那么我们可以从XmlBeanDefinitionReader 中梳理一下资源文件读取、解析及注册的大致脉络,首先我们看看各个类的功能。

  • ResourceLoader:定义资源加载器,主要应用于根据给定的资源文件地址返回对应的
    Resource。
  • BeanDefinitionReader:主要定义资源文件读取并转换为 BeanDefinition 的各个功能。
  • EnvironmentCapable:定义获取 Environment 方法。
  • DocumentLoader:定义从资源文件加载到转换为Document 的功能。
  • AbstractBeanDefinitionReader:对 EnvironmentCapable、BeanDefinitionReader 类定义的
    功能进行实现。
  • BeanDefinitionDocumentReader:定义读取 Docuemnt 并注册 BeanDefinition 功能。
  • BeanDefinitionParserDelegate:定义解析 Element 的各种方法。

        经过以上分析,我们可以梳理出整个 XML 配置文件读取的大致流程,如下图所示,在XmlBeanDefinitionReader 中主要包含以下几步的处理。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAY13_会话技术-CookieSession综合案例

目录 1 会话跟踪技术的概述2 Cookie2.1 Cookie的基本使用2.1.1 概念2.1.2 Cookie的工作流程2.1.3 Cookie的基本使用2.1.3.1 发送Cookie2.1.3.2 获取Cookie 2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文 3 Session3.1 Session的基本使用…

/var/lock/subsys目录的作用

总的来说,系统关闭的过程(发出关闭信号,调用服务自身的进程)中会检查/var/lock/subsys下的文件,逐一关闭每个服务,如果某一运行的服务在/var/lock/subsys下没有相应的选项。在系统关闭的时候,会…

【SpringBoot】简介及传统的 Spring 框架:对比和分析

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 今天给大家带来的是 SpringBoot 的简介,SpringBoot 项目的创建,相较于 Spring 框架的优点: 1. 快速的集成框架 2.内置运行容器, 快速的部署项目 3. 摒弃…

数据接口有哪些?(数据接口有哪几种)

数据接口是指不同应用程序或系统之间交换数据的通信界面。在现代信息化社会中,数据接口扮演着极为重要的角色,它们使得不同平台之间能够相互连接和交流,从而实现数据共享和应用集成。 数据接口的种类繁多,常见的有以下几种&#…

OpenCvSharp (C# OpenCV) 二维码畸变矫正--基于透视变换(附源码)

导读 本文主要介绍如何使用OpenCvSharp中的透视变换来实现二维码的畸变矫正。 实现步骤 讲解实现步骤之前先看下效果(左边是原图,右边是矫正后的效果): 【1】需求分析 由于相机拍摄角度,导致二维码形状不是矩形,存在明显的畸变。我们希望将其矫正为正常的矩形或者正方形图…

mars3d绘制区域范围(面+边框)

1、图例(绿色面区域白色边框) 2、代码 1)、绘制区域ts文件 import { mapLayerCollection } from /hooks/cesium-map-init /*** 安全防護目標* param map*/ export const addSafetyProtection async (map) > {const coverDatas await m…

游戏服务器的帧率控制

固定Tick时间策略 固定Tick时间&#xff1a;顾名思义就是指程序每次心跳的时间都是等长的、固定的。如图中的“图A”&#xff0c;Tick1和Tick2的时间是相等的&#xff0c;如果实际执行的比上次执行时间长&#xff08;Run2 > Run1&#xff09;&#xff0c;则Sleep2 < Slee…

EventLog Analyzer:保障网络安全的强大日志审计利器

日志审计是现代网络安全中不可或缺的一环。随着信息技术的迅速发展&#xff0c;企业和组织面临着越来越多的网络安全威胁&#xff0c;如数据泄露、网络攻击和内部滥用等。而为了确保网络安全&#xff0c;日志审计成为了必要的措施。在众多日志审计工具中&#xff0c;EventLog A…

neo4j教程-安装部署

neo4j教程-安装部署 Neo4j的关键概念和特点 •Neo4j是一个开源的NoSQL图形存储数据库&#xff0c;可为应用程序提供支持ACID的后端。Neo4j的开发始于2003年&#xff0c;自2007年转变为开源图形数据库模型。程序员使用的是路由器和关系的灵活网络结构&#xff0c;而不是静态表…

个人博客系统[SpringBoot+SpringMVC+MyBais]

文章目录 &#x1f387; 前言1.项目目录介绍2.项目前准备2.1 使用到的第三方库2.1 配置文件&#xff08;application.properties&#xff09;2.2 数据库介绍 3.common目录工具类介绍3.1 AjaxResult类3.2 AppVariable类3.3 CaptchaUtils类3.4 PasswordUtils类3.5 UserSessionUti…

VSCode打开终端的方法

VScode打开终端的方法 第一种&#xff1a;快捷键 Ctrl ~ 第二种&#xff1a;选中某个文件&#xff0c;右键&#xff0c;点击“在集成终端中打开” 第三种&#xff1a;在VSCode的页面上方的选项&#xff0c;点击“终端”&#xff0c;再点击“新建终端” 打开后&#xff0c;…

事务,不只ACID

大家好&#xff0c;我是 方圆。一提到事务&#xff0c;最先让我想到的就是ACID和倒背如流的隔离级别。它确实和这些相关&#xff0c;但是在我读了《数据密集型应用系统设计》之后&#xff0c;我想把事务这个主题讲的不那么“传统”。本文的部分内容可能读起来会有些老生常谈的感…

【Vue】在el-table的el-table-column中,如何控制单行、单列、以及根据内容单独设置样式。例如:修改文字颜色、背景颜色

用cell-style表属性来实现。在官网中是这样表述这个属性的。 在el-table中用v-bind绑定此属性。&#xff08;v-bind的简写是&#xff1a;&#xff09; <el-table:data"options":cell-style"cell"><el-table-column prop"id" label"…

医疗小程序:提升服务质量与效率的智能平台

在医疗行业&#xff0c;公司小程序成为提高服务质量、优化管理流程的重要工具。通过医疗小程序&#xff0c;可以方便医疗机构进行信息传播、企业展示等作用&#xff0c;医疗机构也可以医疗小程序提供更便捷的预约服务&#xff0c;优化患者体验。 医疗小程序的好处 提升服务质量…

四章:Constrained-CNN losses for weakly supervised segmentation——弱监督分割的约束CNN损失函数

0.摘要 基于部分标记图像或图像标签的弱监督学习目前在CNN分割中引起了极大关注&#xff0c;因为它可以减轻对完整和繁琐的像素/体素注释的需求。通过对网络输出施加高阶&#xff08;全局&#xff09;不等式约束&#xff08;例如&#xff0c;约束目标区域的大小&#xff09;&am…

具身智能controller---RT-1(Robotics Transformer)(中---实验介绍)

6 实验 实验目的是验证以下几个问题: RT-1可以学习大规模指令数据&#xff0c;并且可以在新任务、对象和环境上实现zero-shot的泛化能力&#xff1f;训练好的模型可以进一步混合多种其他数据&#xff08;比如仿真数据和来自其他机器人的数据&#xff09;吗&#xff1f;多种方…

玄子Share - Redis 双系统安装教程 Linux Windows(附安装包)

玄子Share - Redis 双系统安装教程 Linux Windows&#xff08;附安装包&#xff09; Linux 安装 Redis 前置条件 Linux 本地体验需安装 Linux 虚拟机 Linux 安装 Redis 需学到第 15 节 【小白入门 通俗易懂】2021韩顺平 一周学会Linux https://www.bilibili.com/video/BV1Sv…

基于POX交叉的遗传算法求解车间调度

对于流水车间调度问题&#xff0c;n个工件在m台设备上加工&#xff0c;已知每个工件每个工序使用的机器和每个工件每个工序所用时间&#xff0c;通过决策每个机器上工件的加工顺序和每个工序的开始时间&#xff0c;使完成所有工序所用时间(makespan)最小。具有下列约束&#xf…

【计算机网络】应用层协议 -- HTTP协议

文章目录 1. 认识HTTP协议2. 认识URL3. HTTP协议格式3.1 HTTP请求协议格式3.2 HTTP响应协议格式 4. HTTP的方法5. HTTP的状态码6. HTTP的Header7. Cookie和Session 1. 认识HTTP协议 协议。网络协议的简称&#xff0c;网络协议是通信计算机双方必须共同遵守的一组约定&#xff0…

直线导轨的主要功能

直线导轨是一种常见的机械结构&#xff0c;用于工业机器人、数控机床和其他自动化装置中。它的作用是提供一个准确的直线运动轨道&#xff0c;使得设备能够在预定的路径上进行精确的移动。 直线导轨作为一种重要的机械基础件&#xff0c;在现代工业中得到了广泛的应用。它主要的…