Java入门到精通——框架篇之Spring源码分析Spring两大核心类

一、Spring核心类概述。
Spring里面有两个最核心的类这是Spring实现最重要的部分。

1、DefaultListableBeanFactory

       这个类位于Beans项目下的org.springframework.beans.factory.support包下。

       XmlBeanFactory(位于org.springframework.beans.factory.xml包)继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册加载bean的默认实现,而对于XmlBeanFactory与DefaultListableBeanFactory不同的地方是XmlBeanFactory中使用了自定义的XML读取器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口。

2、XmlBeanDefinitionReader
        这个类位于org.springframework.beans.factory.xml包下。
        XML配置文件的读取是Spring中重要的功能,因为Spring的大部分功能都是以配置文件作为切入点的。那么我们可以从XmlBeanDefinitionReader中树立一下资源文件读取、解析及注册的功能。

二、两大核心类的层次结构图。

1、DefaultListableBeanFactory

技术分享

从图中不难发现这个类如何从底层一步一步封装起来的。

下面大致的介绍一下主要几个类的作用:

AliasRegistry:对alias的简单增删改查

SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现

SinglegtonBeanRegistry:定义对单例的注册以及获取。

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

DefaultSingletonBeanRegistry:对接口SinglegtonBeanRegistry的各个函数的实现。

HiberarchicalBeanFactory:集成BeanFactory,对BeanFactory功能基础上加上了parentFactory的支持。

BeanDefiniRegistry:定义BeanDefinition的各种增删改查操作。

FactoryBeanRegistrySuppourt:在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理。

CongfigurableBeanFactory:提供配置Factory的各种方法。

ListableBeanFactory:根据各种条件获取Bean的配置清单。

AbstractBeanFactory:综合了FactoryBeanRegistrySuppourt和CongfigurableBeanFactory的功能。

AutowireCapableBeanFacotry:提供创建bean、自动注入、初始化以及应用bean的后处理器。

AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现

ConfigurableListableBeanFactory:BeanFactory配置清单,指定护绿类型及接口DefaultListableBeanFactory:综合了上面所有功能组要对Bean注册后的处理

2.XmlBeanDefinitionReader

技术分享

从这个图我们能看出这个类用如何一步一步的封装起来的。

下面我也简单的说一下主要几个的类有些什么功能:

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

BeanDefinitionRedader:主要定义资源文件读取并且转化为BeanDefinition的各个功能。

DocumentLoder:定义从资源文件加载到转换为Document的功能。

三、总结。

这篇博客对这两个核心类大概的讲述了一下,下面的系列博客会详细的讲述这些类内部是如何实现的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。