Spring 源码分析(三)容器核心类(系列文章基于Spring 5.0)

摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。

在上一篇文章中,我们熟悉了容器的基本用法。在这一篇,我们开始分析Spring的源码。但是在正式开始熟悉源码之前,有必要了解一下Spring中最核心的两个类。

1. DefaultListableBeanFactory

XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现,而对于XmlBeanFactory与DefaultListableBeanFactory不同的地方其实是在XmlBeanFactory中使用了自定义的XML读取器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口。以下是DefaultListableBeanFactory的类图:

从上面的类图中,我们可以清晰地从全局角度了解DefaultListableBeanFactory的脉络。接下来先了解一下上面类图中各个类的作用。

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

2. XmlBeanDefinitionReader

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

通过以上分析,我们可以梳理出整个XML配置文件读取的大致流程,如下图所示:

在XmlBeanDifinitonReader中主要包含以下几个步骤的处理:

1)通过继承自AbstractBeanDefinitionReader中的方法,来使用ResourceLoader将资源文件路径转换为对应的Resource文件。

2)通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件。

3)通过实现接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析。

作者:写出高级BUG

cnblogs.com/warehouse/p/9374517.html

往期精选  点击标题可跳转

微软公司将不兼容 IE 的网站自动重定向至 Edge 浏览器

面试官问:MyBatis 日志如何做到兼容所有常用的日志框架?

为什么很多公司强制弃坑 Fastjson 了?主推 Jackson

MySQL 中 delete、truncate、drop 关键字的区别有哪些,该如何选择?

Spring 最常用的 7 大类注解,哪些你还不知道?

Spring Boot 项目中如何更规范的使用 PageHelper 分页插件?

如何实现 MySQL 中通过SQL语句删除重复记录并且只保留一条记录

面试必问:Redis 持久化是如何做的?RDB 和 AOF 对比分析

Spring Boot 集成 Quartz 实现定时任务的动态创建、启动、暂停、恢复、删除等操作

IntelliJ IDEA 15款 神级超级牛逼插件推荐(自用,真的超级牛逼)

点个赞,就知道你“在看”!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值