Spring 源码分析(一)容器的基本实现

Spring源码——容器的基本实现 前言 内容主要参考自《Spring源码深度解析》一书,算是读书笔记或是原书的补充。进入正文后可能会引来各种不适,毕竟阅读源码是件极其痛苦的事情。 本文主要涉及书中第二章的部分,依照书中内容以及个人理解对Spring进行了注释,详见Github仓库:https://github.com/MrSorrow/spring-framework I. 容器基本用法 测试工程 在上一篇文章中,已... 阅读详情

一:核心类的介绍

Spring中两个比较重要的类DefaultListableBeanFactory和XmlBeanDefinitionReader,其中:DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册和加载bean的默认实现,它继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory, BeanDefinitionRegistry。XmlBeanDefinitionReader的功能是对Spring的资源文件读取,解析及注册的功能。

1:DefaultListableBeanFactory类的结构图

2:DefaultListableBeanFactory类结构图中各个类的作用

  • AliasRegistry 定义对alias的简单增删改等操作。
  • SimpleAliasRegistry 实现了AliasRegistry,主要使用map作为alias的缓存,使用的是ConcurrentHashMap。
  • SingletonBeanRegistry 定义对单例的注册及获取。
  • BeanFactory 定义获取bean或bean的各种属性。
  • DefaultSingletonBeanRegistry 对接口SingletonBeanRegistry的实现。
  • HierarchicalBeanFactory 继承BeanFactory,在BeanFactory的基础上增加获得父接口的方法。
  • BeanDefinitionRegistry 定义对BeanDefinition的各种增删改操作。
  • FactoryBeanRegistrySupport 在DefaultSingletonBeanRegistry的基础上增加对FactoryBean的特殊处
  • ConfigurableBeanFactory 提供配置Factory的各种方法。
  • ListableBeanFactory 根据各种条件获取bean的配置清单。
  • AbstractBeanFactory 综合了FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。
  • AbstractAutowireCapableBeanFactory 继承AbstractBeanFactory并对AutowireCapableBeanFactory进行了实现。
  • ConfigurableListableBeanFactory: BeanFactory的配置清单,指定忽略类型及接口等。
  • DefaultListableBeanFactory 综合上面所有功能,主要是对bean注册后的处理。

3:XmlBeanDefinitionReader 的类结构图

4:XmlBeanDefinitionReader 类结构图中各个类的作用

  • ResourceLoader 根据路径加载资源文件,返回对应的Resource。
  • BeanDefinitionReader 定义资源文件读取并转换为BeanDefinition的各个功能。
  • EnvironmentCapable 定义获取Environment的方法。
  • DocumentLoader 定义从资源文件加载到转换为Document的方法。
  • AbstractBeanDefinitionReader 对BeanDefinitionReader, EnvironmentCapable的实现。
  • BeanDefinitionDocumentReader 定义读取Document并注册BeanDefinition的方法。
  • BeanDefinitionParserDelegate 定义解析Element的各个方法。

XmlBeanDefinitionReader 通过继承AbstractBeanDefinitionReader 的方法,可以使用ResourceLoader 的方法将资源文件路径转换为对应的Resource文件。通过DocumentLoader 对Resource文件进行转换,将其转换为Document文件。通过接口BeanDefinitionDocumentReader 的实现类DefaultBeanDefinitionDocumentReader对Document文件进行解析,并使用BeanDefinitionParserDelegate解析Element。

 

 

 

 

 

ubuntu下编译qtwebengine ubuntu qtwebengine 阅读详情

相关推荐

ADS新手必看:ICCAP数据导入与导出CSV的完整流程(附常见问题解决)

本文为ADS新手详细讲解了如何将ICCAP测试数据导入ADS进行仿真分析,并导出为通用CSV格式的完整流程。内容涵盖文件格式解析、导入设置、数据验证、处理技巧及常见问题排查,重点解决了数据文件导入过程中的兼容性与单位映射等核心难点,帮助射频工程师高效连接测量与仿真环节。

peace的博客 560

Spring容器的基本实现

1.容器的基本用法 bean是Spring中最核心的东西,因为Spring就像是个大水桶,而bean就像是容器中的水,水桶脱离了水也便没什么用处了。 Spring的目的就是让我们的bean能成为一个纯粹的POJO,这也是Spring所追求的。 2.功能分析 bean完成的功能无非就是以下几点: ·读取配置文件 ·根据配置文件中的配置找到对应的类的配置,并实例化。 ·调用实例化后的实例 如果需要完成我们预想的功能,至少需要3个类。 ·ConfigReader:用于读取及验证配置文件 ·ReflectionUt

yfxlr的博客 595

别再只会用555了!手把手教你用运放和RC电路搭一个50Hz正弦波信号源(附Multisim仿真文件)

本文详细介绍了如何使用运放LM358和RC电路搭建一个精准的50Hz正弦波信号源,涵盖文氏电桥核心原理、单电源供电解决方案、Multisim仿真及实物调试技巧。通过实战指南和优化建议,帮助电子爱好者快速掌握低频信号生成技术,适用于各种测试和校准场景。

weixin_34116482的博客 368

spring源码深度解析—容器的基本实现

spring源码深度解析—容器的基本实现 1. 概述 分析源码是一件非常具有挑战性的工作,在正是分析spring的源码之前我们先来简单回顾下spring核心功能的简单使用 2. 容器的基本用法 bean是spring最核心的东西,spring就像是一个大水桶,而bean就是水桶中的水,水桶脱离了水也就没有什么用处了,我们简单看下bean的定义,代码如下: public class MyB...

渔潭的博客 3万+

QT触摸屏开发:如何通过重写事件处理实现精准按键长按检测

本文针对QT触摸屏开发中按键长按检测不精准的常见问题,深入剖析了传统信号机制失效的原因,并提供了通过重写事件处理函数(event)的解决方案。文章详细介绍了创建自定义TouchButton类、直接处理QTouchEvent以实现可靠长按检测的完整步骤与代码示例,并分享了进阶优化与避坑指南,帮助开发者实现跨平台一致的精准交互。

weixin_29207149的博客 102

SimpleITK图像基础(一)——3D Resampling

文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM

YYY_77的博客 2021

spring容器实现

Spring容器的简单实现(IOC原理) 引言:容器是什么?什么是容器?Spring容器又是啥东西?我给Spring容器一个对象名字,为啥能给我创建一个对象呢? 一、容器是装东西的,就像你家的水缸,你吃饭的碗等等。 java中能作为容器的有很多,例如Map,List,数组.....还有好多 二、Spring 容器的核心就是一个Map集合(可能不是很准确,见谅!) Map<String,...

qq_19450921的博客 188

ansys 求解过程中出现未知错误。检查“求解信息”对象上的“求解器输出”,查找可能的原因。-静力学分析遇到的,这是什么原因——An unknown error occurred ——未找到解决方法

点击“确定”关闭弹窗后,进入Workbench的‌“求解信息”对象‌,查看‌“求解器输出”‌,搜索“Error”“Fatal”“Warning”等关键词,找到具体的错误描述,比如材料未定义、网格质量问题、内存不足等,这是精准解决问题的关键。进入“工具-选项-mechanical APDL”,取消勾选“分布式”,GPU加速器选择“none”。在“求解进程设置-高级”中调整内存分配参数,或切换为迭代求解器(如PCG求解器),它更省内存。尝试简化模型,比如删除非关键细节、合并重复部件,分步验证模型,定位问题源。

qq_15963745的博客 630

spring源码-容器的基本实现

                                                                           spring源码-容器的基本实现 1、容器基本用法 1)实例:  bean的定义:          实体类{属性,set,get} 配置文件:          &lt;bean id="实体类名(首字母小写)"  class="实体类...

不二红薯 212

3 路由引入

在大型企业网络中,网络规模十分庞大,选用单一的路由协议无法满足网络的需求,因此多种路由协议共存的情况十分常见。或者出于业务逻辑或行政管理的考虑,会在不同的网络结构中设计和部署不同的路由协议,使路由的层次结构更加清晰可控。路由引入是具有方向性的,将路由信息从路由协议A引入到路由协议B(A-to-B),则路由协议B可获知A中的路由信息,但是此时,A还并不知晓B路由协议中的路由信息,除非配置B-to-A的路由引入。表3-1:各种路由协议的优先级。通过路由引入,可以实现路由信息在不同路由协议间传递。

lwljh134的博客 622

SAP 52策略测试简介

我们看下下层物料的需求,可以看到物料的需求已经跑出来了,我们双击计划订单,发现是没有办法将计划订单转换为采购申请的,这里是否还记得我们在前面创建主数据的时候独立集中我们填写的是1,所以物料继承了上层物料的策略,所以不能将计划订单进行转换。我们在前面测试了50策略按单生产,创建完计划独立需求后,通过主数据中的独立集中的字段控制下层物料是否能通过计划订单转成生产订单和采购订单。可以看到下层物料的计划订单就可以转采购申请了,到这里可以看到52策略和50策略的计划独立需求完全是一样的。

我小时候很黑的博客 1274

Spring 源码分析 (一) 容器的基本实现

spring 容器的基本实现Spring结构组成容器的基础 XmlBeanFactory获取XML的验证模式获取Document解析及注册BeanDefinitions Spring结构组成 了解Spring之前需要先了解Spring中的两个核心类。 DefaultListableBeanFactory DefaultListableBeanFactory 是整合Bean加载的核心部分,是Spring注册几家在的Bean的默认实现。XmlBeanFactory继承DefaultListableBeanFa

lidxx的博客 289

100 道大数据开发技术原理与实战面试宝典(必过答案详细解析)I

在数字化浪潮席卷全球的今天,大数据开发工程师已成为企业数字化转型的核心力量。无论是互联网巨头的用户行为分析,还是金融机构的风险控制,亦或是智慧城市的数据中枢,都离不开大数据技术的支撑。然而,面对BAT等头部企业严格的面试要求,候选人不仅需要掌握扎实的理论基础,更需具备将技术落地的实战能力。本文基于历年高频面试题与企业真实场景需求,梳理100道必考题目,涵盖基础概念、框架原理、算法设计、性能优化等核心领域,助你构建完整的知识体系,从容应对面试挑战。

AI天才研究院 1390

《拉勾Java高薪课程》阶段一输出 之 IoC容器设计实现及Spring源码分析 - 学习笔记 --菜鸟小回

阶段一模块二学习笔记-Spring高级框架 文章目录阶段一模块二学习笔记-Spring高级框架@[toc]一、自定义Ioc&AOP框架1. spring概述2. 核心思想2.1 Ioc2.2 AOP3.手写IOC和AOP3.1银行转账的工厂模式实现3.2事务控制3.3将所有用到的工具类等以bean形式封装到xml中。3.4 手写IOC与AOP示意图二、 spring IOC应用1. BeanFactory与ApplicationContext区别2. 启动IOC的方式2.1 Java环境下2.2

菜鸟小回的博客 1309

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

个人spring见解指南

spring来管理,通过各种各样的手段也就是模式,汇集到spring容器池里面去,在这个容器池里有一个大的集合,大集合里有小集合,像是一个List<map<k,v>>.的形式.然后spring又通过各种各样的手段如代理,去这个池子里去拿Bean,每个Bean的话都由@Compent,这样类似的注解来去找spring注册,注册好后就形成了xml中的文件,或者就没形成,直接组装成数据在一个特定的容器中供它调用,这个容器有自己的标识定位.从而来达到某种类似xml被dom4j等解析类解析使用

shizhon5666的博客 113

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring源码分析(1)-IoC容器的实现

最近在看《Spring技术内幕》这本书学习Spring的技术源码,写博客来记录自己的学习过程。 第一章 这一章主要介绍了Spring的子项目和核心实现、Spring出现的目标。 第二章-IoC容器的实现 控制反转 主动获取依赖的过程:Test对象需要用到Hello属性对象的时候,自己创建一个Hello对象。 public class Hello{ public ...

xjh19970715的博客 243

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring官网阅读(一)容器及实例化

从今天开始,我们一起过一遍Spring的官网,一边读,一边结合在路神课堂上学习的知识,讲一讲自己的理解。不管是之前关于动态代理的文章,还是读Spring的官网,都是为了之后对Spring的源码做更全面细致的学习,所以在这个过程中,不会涉及过多底层的代码,更多是通过例子证明我们在官网得出的结论,希望自己可以坚持下来,给自己加个油!!! 本文主要涉及到官网中的1.2,1.3节。 文章目录Sprin...

做一个认真的程序员 1万+

Spring MVC源码分析(二):Spring容器的加载

概述

源码之下,了无秘密 1万+

spring源码分析

1、spring ioc源码分析   Spring IOC中bean的创建是利用反射+xml解析实现的,因此这里也围绕这个来做分析。 ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); Spring所有的工作由这一句代...

losemyfuture的博客 1万+

spring源码分析之容器的使用

本篇博文从通过xml配置一个交由Spring管理的类 并通过XmlBeanFactory类获取的小例子,希望通过这篇文章大家能有所收获。

liushangzaibeijing的博客 6万+

【小家Spring】Spring IOC容器启动流程 AbstractApplicationContext#refresh()方法源码分析(一)

前言 还记得我在这篇博文:【小家Spring】Spring容器(含父子容器)的启动过程源码级别分析(含web.xml启动以及全注解驱动,和ContextLoader源码分析) 里留了几个非常重要,但是没有解释的方法。其中有一个非常重要的方法ApplicationContext#refresh()方法就是提到两次但都暂时忽略了(因为有父子容器,所以会刷新两次容器~) refresh()方法是Spri...

架构师:通透,才能写出好代码! 1万+

Spring源码分析一:容器的刷新 - refresh()

一、前言 本文基于 Spring-boot 2.2.6 二、 AbstractApplicationContext#refresh @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. // 准备刷新上下文环境

猫吻鱼的博客 1万+

spring源码分析 容器的基本实现

目录 容器基本用法 功能分析 工程搭建 Spring的结构组成 beans包的层级结构 核心类介绍 DefaultListableBeanFactory XmlBeanDefinitionReader 容器的基础XmlBeanFactory 配置文件封装 加载Bean 获取Xml的验证模式 DTD与XSD区别 验证模式的读取 获取Document EntityResolver用法 解析及注册BeanDefinitions Profile属性的使用 解析并注册Bean D

今天吃了吗的博客 346

1.Spring容器的基本实现

spring 容器的基本实现 源码解析,本章主要讲了容器的基本BeanFactory的初始化过程,从读取配置文件到解析配置文件的内容

qq_37133838的博客 1249

Spring系列篇:Spring容器基本使用及原理完整源码分析

大厂Java高级资料 最新整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud等详细讲解,也有详细的学习规划图,面试题整理等,我感觉在面试这块讲的非常清楚:获取面试资料只需:[点击这里领取!!!] 暗号:优快云 环境 jdk1.8 idea maven-3.6.1 spring-5.2.3.RELEASE IOC容器 IOC容器是具有依赖注入功能的容器,负责对象的实例化、对象的初始化,对象和对象之间依赖关系配置、对象的销毁、对外提供对象

a646705816的博客 3344
上一篇: Centos7上安装docker (转)
下一篇: JAVA并发编程笔记(一)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值