Spring 源码分析(一)容器的基本实现

一:核心类的介绍

Spring中两个比较重要的类DefaultListableBeanFactory和XmlBeanDefinitionReader,其中:DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册和加载bean的默认实现,它继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory, BeanDefinitionRegistry。XmlBeanDefinitionReader的功能是对Spring的资源文件读取,解析及注册的功能。

1:DefaultListableBeanFactory类的结构图

《Spring 源码分析(一)容器的基本实现》

2:DefaultListableBeanFactory类结构图中各个类的作用

  • AliasRegistry 定义对alias的简单增删改等操作。
  • SimpleAliasRegistry 实现了AliasRegistry,主要使用map作为alias的缓存,使用的是ConcurrentHashMap。
  • SingletonBeanRegistry 定义对单例的注册及获取。
  • BeanFactory 定义获取bean或bean的各种属性。
  • DefaultSingletonBeanRegistry 对接口SingletonBeanRegistry的实现。
  • HierarchicalBeanFactory 继承BeanFactory,在BeanFactory的基础上增加获得父接口的方法。
  • BeanDefinitionRegistry 定义对BeanDefinition的各种增删改操作。
  • FactoryBeanRegistrySupport 在DefaultSingletonBeanRegistry的基础上增加对FactoryBean的特殊处
  • ConfigurableBeanFactory 提供配置Factory的各种方法。
  • ListableBeanFactory 根据各种条件获取bean的配置清单。
  • AbstractBeanFactory 综合了FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。
  • AbstractAutowireCapableBeanFactory 继承AbstractBeanFactory并对AutowireCapableBeanFactory进行了实现。
  • ConfigurableListableBeanFactory: BeanFactory的配置清单,指定忽略类型及接口等。
  • DefaultListableBeanFactory 综合上面所有功能,主要是对bean注册后的处理。

3:XmlBeanDefinitionReader 的类结构图

《Spring 源码分析(一)容器的基本实现》

4:XmlBeanDefinitionReader 类结构图中各个类的作用

  • ResourceLoader 根据路径加载资源文件,返回对应的Resource。
  • BeanDefinitionReader 定义资源文件读取并转换为BeanDefinition的各个功能。
  • EnvironmentCapable 定义获取Environment的方法。
  • DocumentLoader 定义从资源文件加载到转换为Document的方法。
  • AbstractBeanDefinitionReader 对BeanDefinitionReader, EnvironmentCapable的实现。
  • BeanDefinitionDocumentReader 定义读取Document并注册BeanDefinition的方法。
  • BeanDefinitionParserDelegate 定义解析Element的各个方法。

XmlBeanDefinitionReader 通过继承AbstractBeanDefinitionReader 的方法,可以使用ResourceLoader 的方法将资源文件路径转换为对应的Resource文件。通过DocumentLoader 对Resource文件进行转换,将其转换为Document文件。通过接口BeanDefinitionDocumentReader 的实现类DefaultBeanDefinitionDocumentReader对Document文件进行解析,并使用BeanDefinitionParserDelegate解析Element。

 

 

 

 

 

    原文作者:Spring Boot
    原文地址: https://blog.csdn.net/java1_boy/article/details/83105912
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞