Spring源码深度解析总结(1)——XmlBeanFactory的结构组成

最近在读《Spring源码深度分析》这本书,虽然讲的是Spring3.0版本的东西,但是基本的思想还是相同的。所以我打算一边读一边做一些总结,一方面在看过一边之后再捋一遍整体的过程,另一方面也防止日后忘记某些东西无处可查。

在开始源码阅读之前,我们首先要了解一下Spring中常用的一些类的名称和作用,不然很有可能到最后把自己绕晕了。以下大部分摘自书中的原话

Spring获取bean一般使用ApplicationContext来获取,而ApplicationContext实现了BeanFactory的所有功能,同时对其进行了功能的扩展,所以我们要了解ApplicationContext之前首先需要弄清楚BeanFactory的结构组成,下面我们就看一下BeanFactory的一个实现类XmlBeanFactory的结构。

DefaultListableBeanFactory我们平时所熟知的XmlBeanFactory就是继承自这个类的,所以这个类的重要程度不言而喻,它是整个bean加载过程中的核心部分,是Spring注册及加载bean的默认实现,它与XmlBeanFactory的区别是XmlBeanFactory使用了自定义的XML读取器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取。DefaultListableBeanFactory继承自AbstractAutowireCapableBeanFactory实现了ConfigurableListableBeanFactory和BeanDefinitionRegistry接口。下面是DefaultListableBeanFactory的层次结构图


下面是上图中出现的各个类的作用

    AliasRegistry:定义对alias的简单的增删改查操作

    SimpleAliasRegistry:是AliasRegistry接口的实现,使用map作为alias的缓存

    SingletonBeanRegistry:定义对单例的注册和获取

    BeanFactory:定义获取bean及bean的各种属性

    DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现,同时继承了SimpleAliasRegistry

    HierarchicalBeanFactory:继承BeanFactory,主要是在BeanFactory的基础上增加了对parentFactory的支持

    BeanDefinitionRegistry:定义对BeanDefinition的各种增删改查

    FactoryBeanRegistrySupport:继承自DefaultSingletonBeanRegistry,在此基础上增加了对FactoryBean的特殊处理功能

    ConfigurableBeanFactory:继承了HierachicalBeanFactorySingletonBeanRegistry接口,提供了配置Factory的各种方法

    ListableBeanFactory:继承BeanFactory接口,根据各种条件获取bean的配置清单

    AbstractBeanFactory:继承FactoryBeanRegistrySupport和实现了ConfigurableBeanFactory接口,综合了它们的功能

    AutowireCapableBeanFactory:继承了BeanFactory接口,提供创建bean,自动注入,初始化以及应用bean的后处理器

    AbstractAutowireCapableBeanFactory:继承了AbstractBeanFactory和实现了AutowireCapableBeanFactory和接口

 ConfigurableListableBeanFactory:实现了ConfigurableBeanFactoryListableBeanFactoryAutowireCapableBeanFactory这三个接口,                                                                  主要为了给BeanFactory配置清单,指定忽略类型及接口等

 DefaultLisableBeanFactory:继承了AbstractAutowireCapableBeanFactory,实现了BeanDifinitionRegistryConfigurableListaleBeanFa                                                        ctorySerializable接口,综合了上述所有的功能,主要对Bean注册后处理

XmlBeanFactory对DefaultLisableBeanFactory进行了扩展,主要用于从XML文档中读取BeanDefinition,对于注册及获取bean都是从父类DefaultListableBeanFactory继承的方法去实现,唯一与父类不同的就是增加了XmlBeanDefinitionReader类型的reader属性,它的作用就是对资源文件进行读取和注册。下面我们来看看XmlBeanDefinitionReader的结构组成。

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

    ResourceLoader:被AbstractBeanDefinitionReader引用的类,定义资源加载器,主要应用于根据给定的资源文件地址返回对应的Resource

    BeanDefinitonReader:主要定义资源文件读取并转换为BeanDefinition的各个功能

    EnvironmentCapable:定义获取Enviroment的方法

    DocumentLoader:XmlBeanDefinitionReader引用的类定义从资源文件加载到转换为Document的功能,默认实现是DefaultDocumentLoader

    AbstractBeanDefinitionReader:对EnvironmentCapableBeanDefinitionReader接口的实现

    BeanDefinitionDocumentReader:定义读取Document并注册BeanDefinition的功能,默认实现是DefaultBeanDefinitionDocumentReader

    BeanDefinitionParserDelegate:不是被XmlBeanDefinitionReader直接引用而是被XmlBeanDefinitionReader引用的BeanDefinitionDocum                                                             ent引用的类,作用是定义解析Element的各种方法。

经过上面的介绍,我们可以大概的梳理出XML配置文件读取的大致的流程:

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

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

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

至此,我们对于XmlBeanFactory的结构以及流程有了一个大致的了解,之后的文章再进行深入的了解和源码的分析

    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值