zoukankan      html  css  js  c++  java
  • Spring源码分析(三)容器核心类

    摘要:本文结合《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的脉络。接下来先了解一下上面类图中各个类的作用。

    AliasRegistry 定义对alias的简单增删改查等操作
    SimpleAliasRegistry 主要使用map作为alias的缓存,并对接口AliasRegistry进行实现
    SingletonBeanRegistry 定义对单例的注册及获取
    BeanFactory 定义获取bean及bean的各种属性
    DefaultSingletonBeanFactory 对接口SingletonBeanRegistry各函数的实现
    HierarchicalBeanFactory 继承BeanFactory,也就是在BeanFactory定义的功能的基础上增加了对parentFactory的支持
    BeanDefinitionRegistry 定义对BeanDefinition的各种增删改操作
    FactoryBeanRegistrySupport 在DefaultSingletonBeanRegistry的基础上增加了对FactoryBean的特殊处理功能
    ConfigurableBeanFactory 提供配置Factory的各种方法
    ListableBeanFactory 根据各种条件获取bean的配置清单
    AbstractBeanFactory 综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能
    AutowireCapableBeanFactory 提供创建bean、自动注入,初始化以及应用bean的后处理器
    AbstractAutowireCapableBeanFactory 综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现
    ConfigurableListableBeanFactory BeanFactory配置清单,指定忽略类型及接口等
    DefaultListableBeanFactory 综合上面所有功能,主要是对Bean注册后的处理

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

    2. XmlBeanDefinitionReader

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

    ResourceLoader 定义资源加载器,主要应用于根据给定的资源文件地址返回对应的Resource
    BeanDefinitionReader 主要定义资源文件读取并转换为BeanDefinition的各个功能
    EnvironmentCapable 定义获取Environment方法
    DocumentLoader 定义从资源文件加载到转换为Document的功能
    AbstractBeanDefinitionReader 对EnvironmentCapable、BeanDefinitionReader类定义的功能进行实现
    BeanDefinitionDocumentReader 定义读取Document并注册BeanDefiniton功能
    BeanDefinitionParserDelegate 定义解析Element的各种方法

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

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

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

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

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

  • 相关阅读:
    hdoj 2803 The MAX【简单规律题】
    hdoj 2579 Dating with girls(2)【三重数组标记去重】
    hdoj 1495 非常可乐【bfs隐式图】
    poj 1149 PIGS【最大流经典建图】
    poj 3281 Dining【拆点网络流】
    hdoj 3572 Task Schedule【建立超级源点超级汇点】
    hdoj 1532 Drainage Ditches【最大流模板题】
    poj 1459 Power Network【建立超级源点,超级汇点】
    hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】
    hdoj 1012 u Calculate e
  • 原文地址:https://www.cnblogs.com/warehouse/p/9374517.html
Copyright © 2011-2022 走看看