当前位置: 首页 > news >正文

Spring 源码解读

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 中主要包含以下几步的处理。

 

相关文章:

Spring 源码解读

1、Spring 的结构组成 1.1、核心类介绍 Spring 中有两个最核心的类 1 DefaultListableBeanFactory XmlBeanFactory 继承自 DefaultListableBeanFactory,而DefaultListableBeanFactory 是整个 bean加载的核心部分,是 Spring 注册及加载 bean 的默认实现…...

练习时长两年半的网络安全防御“first”

1.网络安全常识及术语 下边基于这次攻击演示我们介绍一下网络安全的一些常识和术语。 资产 任何对组织业务具有价值的信息资产,包括计算机硬件、通信设施、 IT 环境、数据库、软件、文档资料、信息服务和人员等。 网络安全 网络安全是指网络系统的硬件、软件及…...

HttpRunner自动化测试之响应中文乱码处理

响应中文乱码: 当调用接口,响应正文返回的中文是乱码时,一般是响应正文的编码格式不为 utf-8 导致,此时需要根据实际的编码格式处理 示例: 图1中 extract 提取title标题,output 输出 title 变量值&#x…...

idea使用命令将jar包导入到maven仓库中

因为今天突然忘了命令,记下来方便以后查看 pom文件的依赖 jar包路径 进入idea中命令窗 输入命令 mvn install:install-file -DfileD:\Project\spring-cloud\dubbo-api\target\dubbo-api-1.0-SNAPSHOT.jar -DgroupIdcom.wmx -DartifactIddubbo-api -Dversion1.0…...

zookeeper学习(一) Standalone模式(单机模式)安装

安装准备 centos7环境jdk1.8环境zookeeper安装包 安装jdk 上传jdk安装包解压安装包到目录中 tar -zxvf jdk-8u361-linux-x64.tar.gz如果需要指定目录可以在后面加上 -C,如 tar -zxvf jdk-8u361-linux-x64.tar.gz -C 目录配置jdk环境变量 vim /etc/profile打开…...

native webrtc支持切换音频采集设备和获取裸流

https://www.yuque.com/caokunchao/rtendq/oq8w3qgs3g59whru 前言 版本webrtc m96 1、修改webrtc m96代码,向外提供一个adm指针的接口出来 2、外部来获取指针进行设备的选择 3、外部获取音频裸流,麦克风或者扬声器的数据 修改webrtc代码 1、修改H:\w…...

HR怎么看待PMP证书呢?

在当今竞争激烈的职场环境中,拥有专业的证书已经成为了许多人提升职业竞争力的必要途径。PMP证书作为项目管理领域的国际认证,备受HR和企业的青睐。那么,HR在招聘和评估员工时,究竟是如何看待PMP证书的呢? 首先&#x…...

API接口:如何通过使用手机归属地查询

随着手机普及率的不断增加,手机号码的信息查询也成为了一个非常实用的功能。本文将介绍如何通过使用手机归属地查询API接口实现查询手机号码所在地的功能。 首先,我们需要一个可以查询手机号码所在地的API接口。目前市面上有很多免费或付费的API接口可供…...

小创业公司死亡剧本

感觉蛮真实的;很多小创业公司没有阿里华为的命,却得了阿里华为的病。小的创业公司要想活无非以下几点: 1 现金流,现金流,现金流; 2 产品,找痛点,不要搞伪需求; 3 根据公司…...

国产化的接口测试、接口自动化测试工具Apipost的介绍及使用

Apipost介绍: Apipost是 API 文档、API 调试、API Mock、API 自动化测试一体化的研发协作赋能平台,它的定位 Postman Swagger Mock JMeter。 Apipost 是接口管理、开发、测试全流程集成工具,能支撑整个研发技术团队同平台工作&#xff0…...

【MySQL】不允许你不知道如何插入数据

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正&#xff0…...

Vue 渲染流程详解

在 Vue 里渲染一块内容,会有以下步骤及流程: 第一步,解析语法,生成AST 第二步,根据AST结果,完成data数据初始化 第三步,根据AST结果和DATA数据绑定情况,生成虚拟DOM 第四步&…...

10分钟内入门 ArcGIS Pro

本文来源:GIS荟 大家好,这篇文章大概会花费你10分钟的时间,带你入门 ArcGIS Pro 的使用,不过前提是你有 ArcMap 使用经验。 我将从工程文件组织方式、软件界面、常用功能、编辑器、制图这5个维度给大家介绍。 演示使用的 ArcGI…...

【ribbon】Ribbon的使用与原理

负载均衡介绍 负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同…...

axios封装到reques.js文件中

封装到js中,避免每次都import 然后写一大堆 import axios from axios /* 可复用的发 ajax 请求的函数: axios */ let baseURLhttp://localhost:3000/ export default function promiseAjax(url,methodget,datanull,params) {return new Promise((resolve, reject) …...

学好Elasticsearch系列-核心概念

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录 节点角色master:候选节点data:数据节点Ingest:预处理节点ml:机器学习节点remote_ cluster_ client:候选客户端节点transform:…...

扩展点都不知道不要说你用了Spring Boot

文章目录 前言1.扩展点1.1. 应用程序生命周期扩展点1.1.1 SpringApplicationRunListener1.1.2 ApplicationEnvironmentPreparedEvent1.1.3 ApplicationPreparedEvent1.1.4 ApplicationStartedEvent1.1.5 ApplicationReadyEvent1.1.6 ApplicationFailedEvent 1.2. 容器扩展点1.2…...

LangChain大型语言模型(LLM)应用开发(五):评估

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…...

Angular:动态依赖注入和静态依赖注入

问题描述: 自己写的服务依赖注入到组件时候是直接在构造器内初始化的。 直到看见代码中某大哥写的 private injector: Injector 动态依赖注入和静态依赖注入 在 Angular 中,使用构造函数注入的方式将服务注入到组件中是一种静态依赖注入的方式。这种方…...

Java前后端交互long类型溢出的解决方案

问题描述: 前端根据id发起请求查找对象的时候一直返回找不到对象,然后查看了请求报文,发现前端传给后台的数据id不对,原本的id是1435421253099634623,可前端传过来的id是 1435421253099634700,后三位变成了…...

QT5集成libmodbus:多线程优化主从机通信的实践指南

1. 为什么需要多线程优化libmodbus通信 在工业监控软件开发中,我们经常遇到一个典型场景:上位机需要实时采集多个下位机的数据,同时还要保证用户界面的流畅响应。使用QT5集成libmodbus时,很多开发者会直接在主线程中实现数据采集逻…...

从拦截到免疫:PKCE如何重塑OAuth授权码流程的安全防线

1. 授权码拦截攻击:OAuth的致命弱点 想象一下这样的场景:你在手机上打开一个看起来很正常的天气应用,点击"使用微信登录"按钮后,系统跳转到微信授权页面。你输入账号密码完成授权,突然发现自己的微信聊天记录…...

影响采集速度的因素有哪些?提高采集速度的措施又有哪些?

一、常见影响采集速度的情况 1.场景1(以HMI举例) 1)触摸屏与 PLC 的通信延时参数已设置为最优,但画面数据显示仍存在明显滞后。该延迟问题易引发操作不同步,存在较高的安全误操作风险。 2)触摸屏显示数据反应明显迟钝或直接提示…...

Stable-Diffusion-v1-5-archive生产环境部署:异常自动拉起+日志监控+多用户隔离方案

Stable-Diffusion-v1-5-archive生产环境部署:异常自动拉起日志监控多用户隔离方案 1. 引言 如果你正在寻找一个稳定、可靠、易于管理的Stable Diffusion v1.5生产环境部署方案,那么你来对地方了。SD1.5作为文生图领域的经典模型,虽然新模型…...

避开FPGA时序分析盲区:除了Clock和Data,别忘了用Set_Data_Check给你的控制信号也上个‘闹钟’

避开FPGA时序分析盲区:控制信号的隐藏时序风险与Set_Data_Check实战 在FPGA设计的世界里,时序约束就像交通信号灯,确保数据在复杂的逻辑网络中安全有序地流动。大多数工程师对时钟和数据信号之间的时序关系了如指掌,却常常忽视了一…...

应对复杂代码库学习难题:AI驱动的智能分析工具

应对复杂代码库学习难题:AI驱动的智能分析工具 【免费下载链接】Tutorial-Codebase-Knowledge Turns Codebase into Easy Tutorial with AI 项目地址: https://gitcode.com/gh_mirrors/tu/Tutorial-Codebase-Knowledge 在快速发展的技术环境中,开…...

Bilibili视频下载终极指南:如何免费高效保存B站精彩内容

Bilibili视频下载终极指南:如何免费高效保存B站精彩内容 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors…...

DiskInfo硬盘检测工具:3步掌握硬盘健康状态的智能监测方案

DiskInfo硬盘检测工具:3步掌握硬盘健康状态的智能监测方案 【免费下载链接】DiskInfo DiskInfo based on CrystalDiskInfo 项目地址: https://gitcode.com/gh_mirrors/di/DiskInfo 在数字化时代,硬盘作为数据存储的核心载体,其健康状态…...

uniapp复制文本的两种实现方式对比:从基础到进阶

Uniapp复制文本功能深度解析:从基础实现到跨平台适配 在移动应用和H5页面开发中,复制文本到剪贴板是一个看似简单却直接影响用户体验的基础功能。作为一款跨平台开发框架,Uniapp提供了多种实现方式,但每种方法都有其特定的适用场…...

Wan2.2-I2V-A14B效果展示:10秒1080P高清视频生成作品集(RTX4090D实测)

Wan2.2-I2V-A14B效果展示:10秒1080P高清视频生成作品集(RTX4090D实测) 1. 专业级视频生成效果惊艳亮相 Wan2.2-I2V-A14B文生视频模型在RTX4090D显卡上的表现令人印象深刻。经过深度优化的私有部署镜像,能够稳定生成10秒1080P高清…...