Spring的IOC类图

转自: http://benladeng5225.iteye.com/blog/1335623

 

spring在ioc的两个体现:一个是BeanFactory,一个是ApplicationContext。

 

一、BeanFactory

 

 

AliasRegistry:提供了注册、删除、获得以及是否是 别名 的方法。
BeanDefinitionRegistry:提供了注册、删除、获得以及是否包含 bean的定义 的等方法,并继承了AliasRegistry。
SimpleAliasRegistry:实现了AliasRegistry中的方法。
SimpleBeanDefinitionRegistry:实现了BeanDefinitionRegistry中的方法,并且继承了SimpleAliasRegistry。
SingletonBeanRegistry:提供了注册、获得以及是否包含 此beanName的单例对象 的等方法。
DefaultSingletonBeanRegistry:实现了SingletonBeanRegistry中的方法,并提供了删除 beanName的单例对象 的方法,
这里面还提供了bean的依赖bean、内部类bean,以及一次性bean的的注册和获得方法。
另外destroySingleton(String beanName)除了删除此 beanName的单例对象,还会删除
依赖bean、内部类bean,以及一次性bean。
另外,继承了SimpleAliasRegistry。
FactoryBeanRegistrySupport:FactoryBean既是bean,又是一个factory,可以从中获取bean的对象。继承了DefaultSingletonBeanRegistry。
BeanFactory:提供了获取bean,判断是否包含此bean,判断此bean是否是单例或多例,获取别名,获取Class对象的方法。
从用户角度来说,获取bean是重要的,而创建bean并不是必须的,因为创建bean可以在获取bean的时候再创建。
HierarchicalBeanFactory:提供了获得父亲beanFactory,判断是否包含此bean的方法。继承BeanFactory。
AutowireCapableBeanFactory:提供了创建bean,装载bean,初始化bean的方法。继承BeanFactory。
ListableBeanFactory:提供了与BeanDefinition相关属性的方法。继承BeanFactory。通过一定查找列出所有bean的方法, 我想这是为什么名字里面有list吧
AbstractBeanFactory:提供了获取bean的实现和其他一些方法。
AbstractAutowireCapableBeanFactory:提供了创建bean的实现和其他一些方法。
DefaultListableBeanFactory:提供了BeanDefinitionRegistry、ListableBeanFactory中方法的实现和其他一些方法。
XmlBeanFactory:包含一个XmlBeanDefinitionReader,对xml的配置文件进行解析。

 

分析:
1. spring中类的命名一般和类中的主要方法的定义吻合,可以理解为一个具备这个行为的东东。从上面来看,有些类一看就符合这一点。有几个类需要多看两 眼,并且分析一下。比如:ListableBeanFactory、DefaultListableBeanFactory、 AbstractBeanFactory。ListableBeanFactory翻译成中文是可列表,可枚举的工厂,而枚举bean的话就需要从 BeanDefinition中获取Class type,所以这个类还提供了和BeanDefinition相关属性的方法,而DefaultListableBeanFactory实现了 ListableBeanFactory的同时还实现了BeanDefinitionRegistry就是这个原因。 AbstractBeanFactory是因为实现了BeanFactory中的方法,就是获取bean的方法。
2. 以上类的继承关系还是比较清晰的,基本上每个类的命名和它里面的方法能够很好的对应起来。但是虽然我想把类图画的比较清晰,不发生交叉,还是发生了交叉。 为了没有交叉,我的建议是把ConfigurableListableBeanFactory这个接口废弃掉,把它的方法抽取到它上面的接口中去,让 DefaultListableBeanFactory直接实现ListableBeanFactory,这样避免了交叉。不过也许 ConfigurableListableBeanFactory这个类有它的深义。 

 

 二、ApplicationContext

 

 

 

 

ApplicationEventPublisher:提供发布事件的方法。
MessageSource:提供了根据Locale获取信息的方法。国际化的作用。
ResourceLoader:资源加载器,提供根据地址获取资源的方法。
ResourcePatternResolver:提供了根据对应的资源描述的样式获取对应的资源数组。
DefaultResourceLoader:实现了ResourceLoader。
Lifecycle:提供了生命周期相关的开始、结束以及判断是否在运行中方法。
DisposableBean:提供了bean被销毁时释放资源的方法。
BeanNameAware:提供了把bean的name放到bean中的方法,因此要被beans实现。
InitializingBean:提供了bean属性全部设置后执行的方法,要被beans实现。
ApplicationContext:除继承ListableBeanFactory、HierarchicalBeanFactory、MessageSource、ApplicationEventPublisher、
ResourcePatternResolver外,还提供了获得AutowireCapableBeanFactory的方法。
ConfigurableApplicationContext:提供了增加beanFactory后处理、增加应用监听器、刷新的方法,还提供了获得
ConfigurableListableBeanFactory的方法。继承ApplicationContext、Lifecycle。
WebApplicationContext:提供了获得servletContext的方法,继承ApplicationContext。
ConfigurableWebApplicationContext:继承WebApplicationContext、ConfigurableApplicationContext外,还提供了一些方法。
AbstractApplicationContext:实现了ApplicationContext中获得AutowireCapableBeanFactory的方法。并且实现了其他一些方法。
增加了三个抽象的方法refreshBeanFactory()、closeBeanFactory()、以及返回类型为
ConfigurableListableBeanFactory的getBeanFactory()。
AbstractRefreshableApplicationContext:实现了AbstractApplicationContext中的refreshBeanFactory()、getBeanFactory()方法。
增加了loadBeanDefinitions(DefaultListableBeanFactory beanFactory)的抽象方法。
AbstractRefreshableConfigApplicationContext:提供了对configLocation的set、get操作。继承AbstractRefreshableApplicationContext,
并提供了对于BeanNameAware、InitializingBean的实现。
GenericApplicationContext:实现了AbstractApplicationContext中的refreshBeanFactory()、getBeanFactory()方法。增加了返回类型为
DefaultListableBeanFactory的getDefaultListableBeanFactory()方法。并实现了BeanDefinitionRegistry。
ResourceAdapterApplicationContext:提供了一个JCA ResourceAdapter的实现方法。
StaticApplicationContext:提供了注册单例bean、多例bean的方法,最终的注册是通过getDefaultListableBeanFactory()实现的,还提供了
增加国际化信息的方法。
AbstractXmlApplicationContext:提供了loadBeanDefinitions方法。
FileSystemXmlApplicationContext:在构造器里用方法描述加载的过程。
ClassPathXmlApplicationContext:在构造器里用方法描述加载的过程,并提供了从ClassPath寻找资源,并加载的构造器方法。
StaticWebApplicationContext:提供了postProcessBeanFactory,即Register request/session scopes的方法。
AbstractRefreshableWebApplicationContext:提供了postProcessBeanFactory和onRefresh方法。
XmlWebApplicationContext:提供了loadBeanDefinitions方法。
VSCode玩转Arduino:手把手解决‘未定义Serial’和头文件找不到的坑 本文详细介绍了在VSCode中配置Arduino开发环境时遇到的‘未定义Serial’和头文件找不到问题的解决方案。通过修改c_cpp_properties.json文件、调整IntelliSense引擎设置以及添加正确的库路径,开发者可以高效解决这些常见错误,提升开发体验。文章还提供了针对不同开发板和平台的高级配置技巧,确保配置的长期有效性。 阅读详情

相关推荐

半导体关键系统之RMS浅谈

这种系统还要求设备在设备上的配方发生变化时通知工厂主机,并需要与EAP(Equipment Automation Process)联结,旨在实时管控自动化系统所用配方与用户当初的设定是否匹配,从而使得自动化系统所用的配方更加趋于安全。例如,制药行业中的药品生产管理系统(GMP),它对药品的生产过程进行严格控制,包括原材料的采购、生产工艺流程、质量控制等方面。这些系统通常与企业的生产系统集成,能够对产品的配方进行精细化管理,包括配方的设计、试验、验证、生产等环节。

阿拉伯梳子的专栏 6161

从spring的ioc类图看spring的ioc设计

spring在ioc的两个体现:一个是BeanFactory,一个是ApplicationContext。   一、BeanFactory   AliasRegistry: 提供了注册、删除、获得以及是否是 别名 的方法。 BeanDefinitionRegistry: 提供了注册、删除、获得以及是否包含 bean的定义 的等方法,并继承了AliasRegistry。 ...

ylsun1113的专栏 392

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机

跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。

VEGETA的博客 7720

【Spring】IOC:核心组件的继承关系类图

下图为 ClassPathXmlApplicationContext 的类继承体系结构,虽然只有一部分,但是它基本上包含了 IoC 体系中大部分的核心类和接口: 下面我们就针对这个图进行简单的拆分和补充说明。 1.Resource 体系 org.springframework.core.io.Resource,对资源的抽象。它的每一个实现类都代表了一种资源的访问策略,如 ClassPathResource、RLResource、FileSystemResource 等。 2.ResourceLoader

A minor 2097

mysql 计算不同胜率的活跃玩家的次日,3日,7日留存率

它根据每天的日期(logymd)和最高段位(max_rank)、胜率段落(win_rate_segment)进行分组,并计算总玩家人数(total_players)、第二天的留存人数(next_day_players)、第三天的留存人数(day3_players)和第七天的留存人数(day7_players)。注意:不是新手留存,是段位活跃玩家留存;最终的结果则是将留存数据进行展示,按照日期(date)、最高段位(rank_level)、胜率段落(win_rate_segment)进行排序。

weixin_42698221的博客 1837

InterSystems IRIS 数据库数据平台安装

下载地址:安装包:IRIS_Community-2024.1.0.267.2-win_x64.exe。

yuguang的博客 2377

【Spring源码】IOC实现-XmlBeanFactory

前言 首先,我们来了解下容器加载的类图:   通过类图,我们可以看出BeanFactory是Spring容器的顶层接口。   在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的,它的作用是:实例化、定位。配置引用程序中的对象及建立这些对象间的依赖。通过类图,我们也可以看出它是一个接口,具体实现包括:DefaultListableBeanFactory、X...

写一封信 685

K230开发板实战:5步搞定YOLOv8模型部署(附常见报错解决方案)

本文提供了一份详细的K230开发板部署YOLOv8模型的实战教程。内容涵盖从环境准备、模型转换到代码编写的完整流程,并重点解析了使用AICube工具链时常见的“生成部署文件异常”等报错解决方案,旨在帮助开发者高效完成嵌入式AI模型部署。

weixin_29053073的博客 787

Spring源码分析之核心容器类图

1.IOC容器的祖先----BeanFactory接口 BeanFactory是Spring IOC中重要的一个顶层接口。它是工厂模式的产物,里面定义了一些对bean操作的方法。在其子接口进行了扩展。它有三个重要的子接口分别是ListableBeanFactory、HierarchicalBeanFactory、AutowireCapableBeanFactory。它们最终都由一个子类进行实现,...

ChinaCR07的博客 813

【实战】CANOE实现UDS安全访问过程的CAPL脚本

首先我已经有了包含安全访问算法的dll文件,并通过Diagnostics/ISO TP Configuration中加载了此dll文件,如下。在on start部分,要将“ECU qualifier“作为参数,执行diagSetTarget函数。这个函数是用于设置tester从现在开始与之通信的目标ECU,并配置/建立与该ECU的通信通道。我最近在做密钥学习上位机时,遇到一些问题:如何用CAPL脚本实现安全访问过程?ECU Qualifier可以通过加载cdd文件后,在如下位置找到。CAPL脚本如何编写。

weixin_46481662的博客 4941

【Matlab】如何使用Simulink进行电池建模和SOC预估

“通过Simulink电池建模进行SOC预估,其实挺容易!” 1 声明 本文只描述一般性电池建模方法,文中出现的电池相关数据来自一些论文或者外文文献,对数据的真实性不做任何保证。 本文参考了不少国内高校的硕士论文和外文文献,所以本篇文章只作为学术性交流,未经...

wanff1204的博客 2万+

00-Spring相关类图

00-Spring相关类图 GitHub地址: https://github.com/HFwas 主要是 notes仓库下Spring文件夹和spring-framework仓库的hfwas分支 文章目录00-Spring相关类图容器加载相关类图配置文件读取相关类图资源文件处理相关类图资源加载相关类图Bean信息相关类图参考资料 容器加载相关类图 上图分析: AliasRegistry:定义对alias的简单增删改等操作 SimpleAliasRegistry:主要使用map作为alias的缓存,并

qq_42685053的博客 1290

CS 188 Project3(RL) Q10:Approximate Q-Learning

实现一个近似的Q-learning学习代理,它学习状态特征的权重,其中许多状态可能共享相同的特征。在qlearningAgents.py中的ApproximateQAgent类中编写实现,它是PacmanQAgent的子类。 注:近似Q-learning学习假设在状态和动作对上存在一个特征函数f(s,a),它产生一个向量f1(s,a) .. fi(s,a) .. fn(s,a)特征值。我们在fe...

大模型与Agent智能体 2657

Spring Ioc类图

Spring Ioc类图

柳清风的专栏 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring IoC类图

Spring IoC容器是spring框架的核心和基础,IoC容器负责spring Bean的生命周期,是spring框架实现其他扩展功能的基础。 容器的继承结构比较复杂,这里画出了spring IoC容器相关的核心类图(没有包括ApplicationContext分支),以帮助理解框架。 BeanFactory继承结构: 其中DefaultListableBeanFactory的子

竹叶青的专栏 4384

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

spring的IOC类图

IOC(Inversion of Control)控制反转:把代码中需要实现的对象创建、依赖的代码反转给容器来帮忙实现。DI(Dependency Injection)依赖注入:对象从容器中查找它的依赖类,并赋值。 思考: 1、对象与对象的关系的表示:xml,properties文件等语义化配置文件表示 2、描述对象关系的文件存放的地方:classPath,filesystem,URL网络资源,...

MUA_Kisuke的专栏 1086

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

spring的ioc类图

spring在ioc的两个体现:一个是BeanFactory,一个是ApplicationContext。   一、BeanFactory   AliasRegistry: 提供了注册、删除、获得以及是否是 别名 的方法。 BeanDefinitionRegistry: 提供了注册、删除、获得以及是否包含 bean的定义 的等方法,并继承了AliasRegistry。 ...

benladeng5225 185

spring 源码之IOC 类图

Spring IoC容器是spring框架的核心和基础,IoC容器负责spring Bean的生命周期,是spring框架实现其他扩展功能的基础。容器的继承结构比较复杂,这里画出了spring IoC容器相关的核心类图(没有包括ApplicationContext分支),以帮助理解框架。BeanFactory继承结构: 其中DefaultListableBeanFactory的子类XmlBe...

weixin_30730151的博客 135

Spring 1-IoC粗类图

一、类图 先来一张全图吧,如图 目的: 从整体上把握各个类、接口之间的关系; 大致了解各个类、接口的职责;

Hello, JavaER 207

【Spring】IOC:核心组件及继承关系类图

下图为 ClassPathXmlApplicationContext 的类继承体系结构,虽然只有一部分,但是它基本上包含了 IoC 体系中大部分的核心类和接口: 下面我们就针对这个图进行简单的拆分和补充说明。 1.Resource 体系 org.springframework.core.io.Resource,对资源的抽象。它的每一个实现类都代表了一种资源的访问策略,如 ClassPathResource、RLResource、FileSystemResource 等。 2.ResourceLoader

菜鸡也有大佬梦 791

spring 主要涉及类类图

把spring 相关类做了下整理,把spring主要涉及的类都整理成类图,方便查看它们之前的关系,也能帮助更好的阅读分析源码. 1. IOC容器 BeanFactory类图: 2.  资源Resource相关类图: 3. 资源加载器ResourceLoader相关类图: 4. spring Bean定义解析器相关: 5. 实

strivezxq的专栏 1万+

Spring IOC的实现demo

前言 今天来说点Spring IOC 的应用,还有简单实现的原理。 正文 简单粗暴一点吧!先来个类图看看各个类之间的关系。 通过这个类图可以看到各个类之间的关系,接下来就把各个类的代码贴出来 package com.hao.server; public interface UserServer { void getUser(); } package com.hao.server; import com.hao.dao.UserDao; import com.hao.dao.UserDa

朗福德的博客 473

UML 类图

类图 内部结构 类再类图上使用包含三个部分的矩形来描述,最上面的部分显示类名,中间是类的属性,最后是类的方法。 相互关系 1. 关联 两个类之间必然存在关联关系。 关联具有一定的方向性:如果仅能从一个类单方向的访问另一个类,则被称为单向关联。 如果可以互相访问,称为双向关联。 关联使用一条实线表示,带箭头的实线表示单向关联。 类里的某个属性引用到另一个实体时,则变成了关联。 聚合 当某个实体聚合成另一个实体时,该实体还可以同时是另一个实体的部分。 例如,学生既可以是篮球俱乐部的成员,也可以使书法俱乐部

大风起兮 369

spring 实现IOC过程源码解析<一>

Spring 实现IOC过程比较复杂,分析起来需要费一些劲,但如果源码研究透了,对个人编码和设计是很有帮助的。 读源码前我们最好先做下面三件事情: 1、自己画出类图。你也可以看别人画的类图,但是只能作为参考,看别人画的类图总感觉隔着一层纱,不清晰。 2、试着自己抽出所有与IOC相关的源码类。因为spring的源码浩浩荡荡,太多,一下子看会让人心烦,畏惧,不想读。如果你单个模块抽出来会感觉好很

hanshuiyu的专栏 229

spring 源码深度解析_源码解析 Spring如何实现IoC的?

点击↑上方↑蓝色“编了个程”关注我~每周至少一篇原创文章这是本公众号的第 28篇原创文章荒腔走板上周一冲动买了个游戏手柄。小时候很喜欢玩游戏,那个时候手柄游戏还是插卡的,冒险岛和魂斗罗什么的。后来接触了电脑游戏,就很少玩手柄游戏了。之前下载了一个《古剑奇谭3》,用键盘玩了一阵子,可能是我手残吧,始终感觉反应不过来,所以想买个手柄看能不能好一点。最近在Steam上趁着打折买了巫师3,有朋...

weixin_39540018的博客 80

源码解析 - Spring如何实现IoC的?

点击↑上方↑蓝色“编了个程”关注我~每周至少一篇原创文章这是本公众号的第 28篇原创文章荒腔走板上周一冲动买了个游戏手柄。小时候很喜欢玩游戏,那个时候手柄游戏还是插卡的,冒险岛和魂斗罗...

yasinshaw的博客 929
上一篇: 面试电子书
下一篇: Spring2.5.6源代码分析(一):IOC容器
O2AtomLife
博客等级 码龄19年 2粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值