最新要闻
- 今日快讯:姆总很生气!头号射手和大巴黎翻脸,想要姆巴佩原谅必须得加钱
- 【独家焦点】王者面前蹦迪 本田思域高速见缝插针式变道被撞惨
- 今日观点!人死后葬礼要花多少钱?为什么现在的死亡成本这么高?
- 全球微速讯:百元级主板也能上游戏神U 微星A620升级支持锐龙7 7800X3D
- 麦当劳是怎么在年轻人心中封神的?
- 卫生间、厨房还是阳台? 新房装修洗衣机真不能随便放
- 春泉产业信托(01426.HK)4月6日回购6万个基金单位
- 每日速读!《泰坦尼克号》女主参演阿凡达2上热搜:对大海有执念
- 每日焦点!GPD Win Max掌机抢先升级AMD 4nm Zen4!核显无敌
- 每日信息:104MB缓存灭掉i9-13900KS!AMD锐龙7 7800X3D正式开卖:3299元神性价
- 热门看点:摩托车驾驶证到期怎么换(摩托车驾驶证到期换证流程)
- 女友争吵后高速路上要跳车 宝马男急忙应急车道 现场火药味十足
- 全球速看:不怵清华北大的中南大学:正批量造富
- 巨石强森演《终结者》T800是啥样?AI绘制以假乱真
- 天罡股份4月13日北交所上会:参与20多项行业标准和技术规范制定
- 超导石墨烯一粒用三年!南孚传应纽扣电池5粒只要7.9元
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【新视野】2、XmlBeanFactory 的类图介绍.md
全局目录.md
(相关资料图)
引子
1、容器最基本使用.md
系列1 - bean 标签解析:
2、XmlBeanFactory 的类图介绍.md
3、XmlBeanFactory 对xml文件读取.md
4、xml配置文件解析之【默认】命名空间【标签】的解析.md
5、xml配置文件解析之【自定义】命名空间【标签】的解析.md
系列2 - bean 获取: getBean() 做了什么
前言
本文可以浓缩为一句话:
从 BeanFactory 进化为 XmlBeanFactory的过程中,究竟套娃继承了哪些类和接口:
- 这些接口分别定义了什么功能
- 这些类分别实现了哪些功能
1 XmlBeanFactory 类图概览
不知道你有没有被吓到,我肯定被吓到了。这么长的类图,感觉还没入门就要入土了。
颤抖之余,我觉得我还是可以挣扎一下的。
这个类图底端从 XmlBeanFactory起始,到顶部的 AliasRegistry、BeanFactory 结束
XmlBeanFactory 继承自spring.beans 的核心组件:DefaultListableBeanFactory;
XmlBeanFactory 虽然已经废弃不建议使用,但是作为学习,并没有太大问题。
从命名风格上看,我们可以看到几个频率非常高的单词,本系列文章中,这些关键词将密集且高频率出现:
Bean 这个肯定不能直译了,我比较喜欢的一个朴素的说法是:
- bean是计算机自动生成的类,bean是一个由Spring IoC容器实例化、组装和管理的 对象
BeanFactory
- 直译:Bean 工厂
Registry
- 直译:注册表,类图里有三个重要的Registry
- SingletonBeanRegistry: 单例 bean 的注册和管理
- AliasRegistry: bean 的别名注册和管理
- BeanDefinitionRegistry: bean 配置的注册和管理
- 直译:注册表,类图里有三个重要的Registry
BeanDefinition
- 直译:Bean定义,我更愿意把它堪称是 Bean 配置
Autowire
- 直译:自动xx
来一句不论不类的串讲:Spring 负责将 Bean的定义内容,自动化的 注册到 Bean工厂。说不伦不类吧,但是好像有又那么一点点味道了。
依据这些关键词再去梳理类图,不难发现这是一个有向无环图,那么我们可以在起点和终点之间拆除多条路径来。
2 类图介绍
我们先把图中的,类和接口负责的功能,简单介绍一下,篇幅会很长,但是我真心觉得很重要:
虽然类图中的继承关系比较复杂,实际上我们关注的时我们的 "成品工厂"
- XmlBeanFactory
- 可以把它理解为:Bean的加工厂,程序运行的过程中随机某个时刻,我们需要某个Bean ,那么去找厂家索要该 Bean即可
需要理解该类图的本质是:从顶层的:BeanFactory 开始,随着继承层次不断加深,BeanFactory 接口的功能被不断的丰富,就像在不停的叠buff,直到最终成长为我们期望的:
- XmlBeanFactory
2.1 顶层 类/接口介绍
实际上 spring.beans 最核心的 东西都在如下4个 类/接口里了。 【这里是按照个人的学习习惯划分的,官方没有这种说法。】
在 XmlBeanFactory 的类图中,处于这几个 接口/类下层的,继承链路上的 接口/类大多都只是做了功能上的丰富。
- AliasRegistry:Alias 直译为别名、化名等;组合起来就是,别名/化名的注册
- 实际上这里对应的是我们在xml文件中配置的 bean名称/bean别名处理相关的操作:注册、校验等等
- BeanFactory:观察如下图所示的方法,不难看出它主要的作用是提供对bean的管理功能
- BeanDefinitionRegistry字面意思,类定义注册表?
- 再看详细方法,就是对 类定义信息的增、删、查、校验操作
所谓类定义,可以理解是bean.xml 中定义的一些元数据
spring 对xml 配置的解析结果,也是通过 BeanDefinition 类来承载的。
- 比如bean的字段、方法上设置
- 参与spring容器生命周期的:init(),destroy() 等方法。
- 类-全限定路径/名称
- 。。。。 下文将对其详细展开
- 再看详细方法,就是对 类定义信息的增、删、查、校验操作
- SingletonBeanRegistry:直译为,对单例Bean的注册
- 下图是该接口定义的一系列方法,可以做个推测:它做的事情就是根据Name维护了一组单例 bean
整点潦草,且天马行空的:
// todo
这是我理解的这几个头部接口的关系:
从 xml 配置得到类定义 ,BeanDefinitionRegistry 负责管理 bean.xml 定义的 元数据信息
从类定义信息梳理出别名,AliasRegistry 负责管理:bean 和 bean的别名的关联关系
根据类 BeanDefinition可以实例化出bean的实例,并通过 BeanFactory 进行维护
而 AliasRegistry 和 BeanFactory 的关系呢,更像是一个键值对卡表
- 维护着bean和 bean的 Alias(别名)之间的关系,我们从工程里要获取bean的时候,可以通过别名获取。
- factory.getBean("BeanName")
- factory.getBean("Bean_AliasName")
- 维护着bean和 bean的 Alias(别名)之间的关系,我们从工程里要获取bean的时候,可以通过别名获取。
而 SingletonBeanRegistry 更像是一个阀门,如果工厂需要支持单例,就需要实现该接口
我们现在有了框架了,基于这个框架再去看各个拓展的 类/接口
2.2 拓展 类/接口 介绍
坐稳了,加速了
SimpleAliasRegistry:没啥好说的,AliasRegistry 接口最的基本实现
- 同理,类图也用不着放了
DefaultSingletonBeanRegistry:同样,没啥好说的,单例bean注册表:SingletonBeanRegistry 接口最的基本实现
- 同理没图
todo
- HierarchicalBeanFactory:
- 它的定义简单得让人心疼,它其实也就一个功能
- 它在最初的 BeanFactory 接口的基础上增加了对 ParentFactory 的支持
- 我理解是,一个bean 可以被:存在继承关系的 多个BeanFactory解析。就像我们平时,就算覆写了超类的方法,实际上也很少将超类方法逻辑直接短路,大部分时候都是会继承超类方法的执行结果的。
- 它在最初的 BeanFactory 接口的基础上增加了对 ParentFactory 的支持
- 它的定义简单得让人心疼,它其实也就一个功能
- ListableBeanFactory:
- 查看它的方法清单 和 接口注释,可以简单梳理下它的功能:
- 拓展 BeanFactory,支持:根据条件获取Bean的配置清单
- 在类的注释上,提到了配置的预加载,它增加的是:对 BeanFactory 管理的的BeanDefinition 的增强。
- 拓展 BeanFactory,支持:根据条件获取Bean的配置清单
- 查看它的方法清单 和 接口注释,可以简单梳理下它的功能:
- FactoryBeanRegistrySupport:
- 它继承自 DefaultSingletonBeanRegistry,在其基础上,增加了 对 FactoryBean 的支持。
- 比如,我们看截图的第一个方法,它的作用是判断给定的FactoryBean 的类型,那么可以遇见,我们在调用getBean(beanName),获取bean时,如果Spring容器发现 xml配置的是 FactoryBean 而非普通bean时,就会通过FactoryBeanRegistrySupport 接口相关的方法进行处理。
- 它继承自 DefaultSingletonBeanRegistry,在其基础上,增加了 对 FactoryBean 的支持。
- ConfigurableBeanFactory:
- 如果实现了该接口,我们的 "bean 工厂" 将会在原基础上,增加各种帮助配置 Factory 的方法
- 看下边图里的一些列setXxx 方法就可以窥见一些东西了,这里包含很多的配置项设置
- BeanFactory的各种配置的:Setter + Getter
- 看下边图里的一些列setXxx 方法就可以窥见一些东西了,这里包含很多的配置项设置
- 如果实现了该接口,我们的 "bean 工厂" 将会在原基础上,增加各种帮助配置 Factory 的方法
- AbstractBeanFactory:
- 其实这个类并没有新增什么比较独特的功能,它主要负责的为前边提到的接口提供,一些必要方法的实现
- 其实回过头去看,它的继承体系,你可以发现,它上层的某几条继承分支,全是接口,我们前边说的那一堆增量功能,大部分都还没人实现呢。。。
- 实际上,AbstractBeanFactory 是个抽象类,它也只是实现了上述接口的一部分内容,有些功能的实现可能还在更下边的类中,才得到落地。
- 最后,看看标注的类注释,其实对功能的归纳已经比较清晰了
- AutowireCapableBeanFactory:
- 这个接口为我们的 "Bean工厂" 增加的是自动配置功能,自动创建Bean、初始化、自动注入、自动后置处理<堪称神器,后续AOP相关章节会仔细探讨>
- 比如我们现在广泛使用的,通过注解定义bean的方式,跟这个接口就息息相关。
- 这个接口为我们的 "Bean工厂" 增加的是自动配置功能,自动创建Bean、初始化、自动注入、自动后置处理<堪称神器,后续AOP相关章节会仔细探讨>
- AbstractAutowireCapableBeanFactory:
- 这是个抽象类,它继承自 AbstractBeanFactory,并实现了 自动配置接口 AutowireCapableBeanFactory 中定义方法
在接口 AutowireCapableBeanFactory 中定义了:支持自动配置的 "Bean工厂",需要有哪些方法。
最终到了抽象类 AbstractAutowireCapableBeanFactory 这里,才提供了具体的实现
- 这是个抽象类,它继承自 AbstractBeanFactory,并实现了 自动配置接口 AutowireCapableBeanFactory 中定义方法
- ConfigurableListableBeanFactory:
- 看下边的方法清单,我们关注它新增的方法,主要包含对 "Bean工厂" 的配置的操作相关方法
- 它包含的配置有:指定忽略的类型以及接口,等等
- 看下边的方法清单,我们关注它新增的方法,主要包含对 "Bean工厂" 的配置的操作相关方法
3 尾声
为啥要单独成一个章节呢?
终于接近尾声了:
- DefaultListableBeanFactory:
- 可以回过头去看上边的类图,万流归海了,有木有?
- 可以认为 DefaultListableBeanFactory 具备了上述接口、抽象类提到的所有功能
- 别名管理功能
- Bean [配置/定义] 管理
- bean 实例对象管理
- 支持单例 [缓存管理]
- BeanFactory 的基础上增加 parentFactory 的支持
- BeanFactory 的配置管理
- 支持自动配置功能:自动创建Bean、初始化、自动注入、自动后置处理
下边,到最后一个类了
- XmlBeanFactory:
- 只看方法清单,新增的方法寥寥无几
- 实际上 XmlBeanFactory 所做的事情,就只是在 DefaultListableBeanFactory 的基础上,拓展了从 XML 文件中读取 BeanDefinition[Bean 定义] 的功能
- 只看方法清单,新增的方法寥寥无几
这里花了很长的篇幅介绍类图,我感觉吃透这个类图还是挺重要的。
关键词:
-
【新视野】2、XmlBeanFactory 的类图介绍.md
全局目录 md引子1、容器最基本使用 md系列1-bean标签解析:2、XmlBeanFactory的类图介绍 md3、XmlBea...
来源: 【新视野】2、XmlBeanFactory 的类图介绍.md
全球观点:执行orachk检查数据库环境
今日快讯:姆总很生气!头号射手和大巴黎翻脸,想要姆巴佩原谅必须得加钱
【独家焦点】王者面前蹦迪 本田思域高速见缝插针式变道被撞惨
今日观点!人死后葬礼要花多少钱?为什么现在的死亡成本这么高?
全球微速讯:百元级主板也能上游戏神U 微星A620升级支持锐龙7 7800X3D
麦当劳是怎么在年轻人心中封神的?
卫生间、厨房还是阳台? 新房装修洗衣机真不能随便放
春泉产业信托(01426.HK)4月6日回购6万个基金单位
【聚看点】数据库系统原理之数据管理技术的发展
每日速读!《泰坦尼克号》女主参演阿凡达2上热搜:对大海有执念
每日焦点!GPD Win Max掌机抢先升级AMD 4nm Zen4!核显无敌
每日信息:104MB缓存灭掉i9-13900KS!AMD锐龙7 7800X3D正式开卖:3299元神性价
热门看点:摩托车驾驶证到期怎么换(摩托车驾驶证到期换证流程)
【新视野】Python + edge-tts:一行代码,让你的文本轻松变成语音!
RL 的探索策略 | Exploration for RL
全球讯息:ORACLE数据库中ORACLE_SID与INSTANCE_NAME的差异
全球观点:geant4基础操作
全球动态:应急响应基础技能
全球速递!兴业银行上线人民币跨境支付系统债券通直通服务
天天快资讯:【财经分析】宏观经济预期改善支撑英镑兑美元汇率走高
女友争吵后高速路上要跳车 宝马男急忙应急车道 现场火药味十足
全球速看:不怵清华北大的中南大学:正批量造富
巨石强森演《终结者》T800是啥样?AI绘制以假乱真
焦点关注:债市日报:4月6日
天罡股份4月13日北交所上会:参与20多项行业标准和技术规范制定
超导石墨烯一粒用三年!南孚传应纽扣电池5粒只要7.9元
环球快资讯丨猩猩被游客扔瓶子砸头后扔回反击 动物园回应被教坏了:网友直呼做的对
ROG游戏手机7 Pro外观曝光:经典电竞小屏、横向三摄
【焦点热闻】Springboot+HTML5+Layui2.7.6上传文件【请求上传接口出现异常】
4299元 宏碁XV275K P3显示器上架:4K Mini LED屏、160Hz高刷
网友29元坐高铁商务座 薅到零食、盒饭“羊毛”!网友热议
【天天快播报】老版本被放弃!Steam将终止对macOS 10.11/10.12系统支持
日本人要搞二次元老婆版ChatGPT:感觉AI成人娃娃也快来了
环球今日讯!女子突然呼吸困难地铁工作人员为她戴严口罩:网友竟然齐声叫好!
生日礼物女生送什么好_女生送这些生日礼物好
当前热议!在线商城爬虫 带爬取记录 以11TREET 为例
世界消息!AIRIOT赋能水务行业深度转型,打造智慧水务“四化建设”
焦点热议:常用Content-Type汇总
天天简讯:用powershell开发跨平台动态网页
当前信息:美国男子承认掰断兵马俑手指并偷走 最严只用服刑2年
速递!20个环球飞车同时炸场!小刀电动车通过暴力测试:比杂技还好看
谷歌亚马逊提供丰厚补偿鼓励离职:悬赏一年薪水
当前速看:女子看手机下楼梯踩空导致脸着地 经检查脸部多处擦伤
【全球热闻】海尔卖成2022全球第一家电品牌!韩国不愿意了:声称LG才是老大
世界视讯!记录-关于console你不知道的那些事
世界今头条!半天时间写完一个案例,循序渐进的掌握uni-app,使用uni-app完成一个简单项目——新闻列表
焦点速讯:【财经分析】多空因素交织博弈 债市尚无近忧仍有远虑
视点!锂价跌破25万“生死线”,锂矿停产挺价?宜春锂业三巨头澄清,传闻不靠谱!
每日简讯:FIFA国家队排名:国足下降至81位 美加墨世界杯出线有希望
还有谁!比亚迪ATTO 3连续5个月蝉联以色列全系单车销冠
环球热点!网友点赞小米之家:线下免费送父母智能手机使用指南 还教用微信
全球快资讯丨苹果虚拟现实头显设备即将到来!果粉不感兴趣
【天天报资讯】不妙!国内油价预计大涨0.4元/升 4月17日起调整
报道:Mysql LOAD DATA读取客户端任意文件
python中动态导入文件的方法
小程序容器助力企业小程序开放平台打造
每日动态!记录一次小程序中讨厌的拍照上传的优化
世界热讯:开心档之C++ 多态
每日聚焦:为节约开支 英国打算用驳船“装”移民
每日看点!首搭长城Hi4电四驱 哈弗枭龙MAX官图发布:博主直言价格合理必卖爆
大疆Mavic 3 Pro无人机曝光:升级三枚摄镜头 奔着2万元去了
上百人进山挖黄金引网友围观!官方回应:挖的是昆虫 被称“土黄金”
世界即时看!马斯克74岁超模妈妈参观特斯拉上海超级工厂:夸赞制造完美、质量过硬
革命性全彩电子纸问世:媲美最先进纸质印刷品 明年量产上市
即时:图解 SQL 执行顺序,通俗易懂!
网上说低代码的一大堆,JNPF凭什么可以火?
环球报道:不管车贵不贵,十万里程后,此3种零件该换就换,别省钱关乎生命
为蹭车位男子当街换车牌被罚5000:驾照十二分也没了
当前热文:苹果服务器再出故障:iCloud、iMessage崩了
世界今头条!曾传乐视靠《甄嬛传》活着 乐视将推85英寸甄嬛传限量电视
当前快播:徕卡超大杯首次进军海外!小米13 Ultra将全球上市
焦点速递!89元 小米米家电动牙刷T200C发布:Type-C充电 续航25天
当前热文:W1R3S
天天热讯:数位dp
今日看点:kill 进程时遇到的一件有意思的事情
焦点速讯:黑夜传说演员表_传说演员表
全球新动态:比尔·盖茨反击马斯克:暂停AI的发展并不能解决问题
每日报道:比亚迪海龙等4款超跑概念图亮相!你觉得哪款最帅?
环球讯息:长城汽车:一位新能源砖家 利润高可能是因为新能源卖的差
狠人!印度一男子爬火车摸25000伏高压电 瞬间成火球吓坏网友
重点聚焦!104MB缓对锐龙7 7800X3D核显无用:鸡血提升不存在
全球热资讯!SpringBoot中如何编写一个优雅的限流组件?
环球今热点:一文快速了解火山引擎 A/B 测试平台
小程序对接三方插件契约锁
【全球新视野】真的有那么好?试完深蓝SL03我明白了
诺基亚E72i手机什么时候上市的?诺基亚E72i手机参数
摩尔庄园怎么获得桑叶?摩尔庄园怎么收获农作物?
龙之谷白屏是怎么回事?龙之谷白屏怎么解决?
天天观点:四年创收20亿美元!微软XGP PC用户突破1500万
大神出手!安卓14/骁龙8 Gen2双双被破解:一键ROOT
南非一客机驾驶舱惊现剧毒眼镜蛇往人身上爬 飞行员神勇应对:平安降落
闲鱼曝光率突然下降怎么办?闲鱼曝光率怎么提高?
闲鱼对方被处置能回复消息吗?闲鱼对方被处置能正常发货吗?
全球热文:某公司技术经理媚上欺下,打工人应怼尽怼,嘤其鸣兮,求其友声!
焦点讯息:用上这几种.NET EF Core性能调优,查询性能飙升
全球今日讯!石家庄:医师资格考试报名材料即将发放
天天观热点:老司机不刹车?特斯拉潮州事故车主不服鉴定 车顶维权女车主:厂商应公开完整数据
世界聚焦:为救高烧幼童 高铁破例停车2分钟
【独家】你敢体验吗?菲律宾推出网红蟒蛇按摩服务:40元享受30分钟