Spring体系总结(一):BeanDefinition

​​​​​​​​​​​​​​

1、BeanDefinition简介

  1. BeanDefiniton是一个接口,继承自AttributeAccessor和BeanMetadataElement两个接口,这两个接口主要是为了“访问对象相关属性”和“获取元数据相关信息”。BeanDefinition的主要定义对象就是Bean,对bean在整个Spring 容器框架中的基本数据结构进行定义,方便BeanFactory等获取。
  2. Spring框架,众多的Bean的定义分为两种形式,一种通过XML,或者通过注解。当我们代码定义完整的Bean后,Ioc启动过程中,就得对相关的xml schema进行解析或相关注解下类进行扫描,从将我们配置的Bean转换为Spring内部表示的数据结构。

2、BeanDefinition注册过程

  1. 由于BeanDefinition的数据来源是我们定义的xml相关的Bean,所以自然BeanDefinition的注册过程就是对于xml的解析过程以及对相关元素赋值的过程,在Spring框架中解析<Bean>元素过程中不是创建和实例化Bean对象,而是通过创建BeanDefinition对象,并将<Bean>元素的相关配置信息填充到BeanDefinition中作为记录,当依赖注入时才使用这些记录的相关信息通过BeanFactory进行实例化具体的Bean对象(就是先下个定义,需要时在使用),众多的BeanDefinition可通过BeanDefinitionHolder集中管理。
  2. Spring提供了主要两种bean Definition解析器,都继承自AbstractBeanDefinitionReader
  • GroovyBeanDefinitionReader

Groovy是一门基于JVM的动态语言,和Spring结合拥有强大的功能,主要可以用在Bean的动态加载,无需重启系统即可实现Bean的加载,特别是Spring cloud zuul中Zuul的规则引擎允许通过任何JVM语言来编写规则和过滤器, 支持基于Java和Groovy的构建。

  • PropertiesBeanDefinitionReader

一种支持简单的属性文件的解析器,对于Map/Properties定义的格式属性文件或者ResourceBundle进行注册,主要是在DefaultListableBeanFactory进行运用。

  • XmlBeanDefinitionReader

一种支持Xml文件的解析器,主要是在DefaultListableBeanFactory和GenericApplicationContext这两个BeanFactory中使用,以及获取Xml中定义的相关Bean的信息。

【PropertiesBeanDefinitionReader和XmlBeanDefinitionReander中的都存在方法registerBeanDefinition方法,这个方法核心作用都是将定义的bean注册到factory】

3、Bean工厂获取BeanDefinition

  • BeanDefinitionRegistry(向注册表中注册 BeanDefinition 实例,完成 注册的过程。)
  • DefaultListableBeanFactory是一个实际意义上的可以独立使用的IOC容器,其是继承接口BeanFactory和BeanDefinitionRegistry两个核心接口,其主要应用就是注册所有的definition或者获取相应的definition。
  • GenericApplicationContext和DefaultListableBeanFactory类似也是继承了两个顶级接口BeanFactory和BeanDefinitionRegistry,同时还集成了ResourceLoader接口进行资源获取

4、涉及到设计模式

代码中AbstractBeanDefinitionReader的三个集成类中通过xml、动态加载获取、参数配置文件等方式来获取解析Bean,这里运用了外观模式,通过一个接口,将内部复杂的实现隐藏,对外客户端暴露简单的接口,实现了解耦。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值