spring源码学习笔记整理--spring两大核心类介绍

一、spring的核心类介绍

1.DefaultListableBeanFactory

XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean的核心加载部分,是spring注册以及加载bean的默认实现方式,而对于XmlBeanFactory与DefaultListableBeanFactory不用的地方是XmlBeanFactory中使用了自定义的xml解析器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,而DefaultListableBeanFactory是通过继承AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory、BeanDefinitionRegistry两个接口。

DefaultListableBeanFactory的作用:

  • DefaultListableBeanFactory是spring注册以及加载bean的默认实现方式
  • 默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于bean definition对象,是一个成熟的bean factroy。
  • 最典型的应用是:在访问bean前,先注册所有的definition(可能从bean definition配置文件中)。使用预先建立的bean定义元数据对象,从本地的bean definition表中查询bean definition因而将不会花费太多成本。
  • DefaultListableBeanFactory既可以作为一个单独的beanFactory,也可以作为自定义beanFactory的父类。

结构图如下:

各个类和接口的作用:

AliasRegistry:里面提供了四个方法都是用来操作别名的。

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

SingletonBeanRegistry:定义了队单例的注册以及获取。

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

DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry中各函数的实现。

HierarchicalBeanFactory:继承了BeanFactory,在BeanFactory的基础上增加了队ParentFactory的支持(ParentFactory)。

BeanDefinitionRegistry:定义了对BeanDefinition的各种操作。

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

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

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

AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。

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

AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory并对AutowireCapableBeanFactory接口的实现。

ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型以及接口等等。

DefaultListableBeanFactory:主要是对bean注册后的处理

 

2.XmlBeanDefinitionReader

 

xml配置文件读取是spring的重要功能,因为spring大部分功能都是以配置文件作为切入点的。下面我们简单了解下

XMLBeanDefinitionReader中读取、解析和注册的大体流程。

结构图如下:

各个类和接口的作用:

AbstractBeanDefinitionReader:对EnvironmentCapable、BeanDefinitionReader类定义的功能进行实现。

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

EnvironmentCapable:定义获取Environment方法(Environment的使用方式是通过@Autowired织入)。

XML配置文件读取的大致流程:

  1. loadBeanDefinitions是加载BeanDefinition接口的核心入口。并且将Resource构造为一个EncodedResource。
  2. doLoadBeanDefinitions是真正执行加载的方法,该方法获取了xml文件的格式,并把其解析为dom格式。
  3. 之后执行了registerBeanDefinitions方法注册BeanDefinition,这里通过BeanDefinitionDocumentReader定义了解析dom的方式。
  4. 然后就进到了DefaultBeanDefinitionDocumentReader中,通过断当前解析元素是否属于默认的命名空间来决定解析方式,然后根据定义方式进行解析。整个解析过程就完成了。

 

 

本人是第一次写博客,该文章是读书后的一些笔记加上网上一些帖子整合出来的整理笔记,可能内容很含糊甚至有错误的部分,希望看到这篇文章的人能够给出指正大家共同进步,有不明白的地方也可以私信我一起交流,千里之行始于足下,只有行动派才有成功的资质。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值