BeanDefinitionReader源码解析

在这里插入图片描述

BeanDefinitionReader接口:BeanDefinitionReader 读取、解析 Resource 资源,负责BeanDefinition的资源定位和载入
BeanDefinitionRegistry getRegistry() 获取注册定义接口
ResourceLoader getResourceLoader() 获取资源加载类
ClassLoader getBeanClassLoader() 获取类加载器
BeanNameGenerator getBeanNameGenerator() beanName获取
loadBeanDefinitions(Resource resource) 通过resource 加载资源
AbstractBeanDefinitionReader :实现接口BeanDefinitionReader的bean定义reader抽象基类,提供常见的属性,工作的bean工程,用于加载bean的加载器。
loadBeanDefinitions 
1、获取资源加载器
2、判断资源加载器类型,如果是ResourcePatternResolver(classpath)将指定位置的bean定义只有文件解析为IOC容器封装的资源
3、其他类型,将指定位置的Bean定义资源文件解析为IOC容器封装的资源,加载单个指定位置的Bean定义资源文件,通过resourceLoader.getResource Resource,委派调用子类loadBeanDefinitions实现加载功能。
XmlBeanDefinitionReader 以XML形式完成对bean的解析与载入,最终完成BeanDefinition的装配加载BeanDefintion的4个接口方法,返回加载beanDefinition的个数
loadBeanDefinitions(Resource resource)
loadBeanDefinitions(EncodedResource encodedResource)
loadBeanDefinitions(InputSource inputSource)
loadBeanDefinitions(InputSource inputSource, @Nullable String resourceDescription)

XmlWebApplicationContext解析配置文件分为以下两个过程:

1、创建并出示XmlBeanDefinitionReader。在XmlWebApplicationContext创建完BeanFactory的时候会调用loadBeanDefinitions(DefaultListableBeanFactory beanFactory)

容器向BeanDefinitionReader提供了3个对象,资源环境Evironment对象,用于判断beans标签的profile属性,第二个是资源加载器ResourceLoader对象,第三个是用于加载xml验证文件的dtd EntityResolver对象

   创建XmlBeanDefinitionReader

2、使用XmlBeanDefinitionReader提供的接口方法来加载BeanDefinition

加载Document对象,使用DocumentLoader来加载Document对象,

使用标准的JAXP将载入的Bean定义资源转换成document对象

注册BeanDefinition registerBeanDefinitions(doc, resource)

1、获取BeanDefinitionDocumentReader来对xml格式的BeanDefinition解析

2、具体的解析通过委派模式DefaultBeanDefinitionDocumentReader

  registerBeanDefinitions(Document doc, XmlReaderContext readerContext)

根据Spring dtd 对bean的定义规则解析bean定义Docment对象,具体解析过程由

BeanDefinitionParserDelegate实现,定义xml文件的各种元素
1、判断是否默认命名空间
2、preProcessXml(root) 在解析Bean定义之前,进行自定义的解析,增强解析过程的可扩展性
3、parseBeanDefinitions(root, this.delegate) 解析Document对象
   判断根对象的命名空间,获取所有子节点,循环获取Node节点
   parseBeanDefinitionElement 解析Bean定义资源文件中的Bean元素,id,name,别名
   ,返回BeanDefinitionHolder,bean定义封装类
   BeanDefinitionReaderUtils.registerBeanDefinition 向Spring容器注册解析到的bean定义信息
4、postProcessXml(root) 解析后扩展

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值