spring源码解析-加载XML文件

最近在阅读郝佳老师编写的《Spring源码深度解析》这本书,这本书的书的1-7章可以归纳为三大模块:xml文件的载入、bean的加载以及AOP模块。接下来我们从xml文件的载入开始讲解。

一、流程图


二、流程说明

从上面的流程图可以很清晰的看清整个spring框架关于ioc读取配置文件的整个流程,下面我们进行详细说明,本来我们是以XmlBeanFactory为载体进行说明。

XmlBeanFactory继承DefaultListableBeanFactory,是BeanFactory的最终实现类之一,目前已经处于废弃状态。

XmlBeanFactory通过构造函数传入resource资源文件,将文件的的读取通过XmlBeanDefinitionReader类中的loadBeanDefinitions(resource)获取,经过EncodedResource进行编码,再调用loadBeanDefinitions(EncodedResource encodedResource)方法,在经过InputStream inputStream = encodedResource.getResource().getInputStream();获取xml文件的输入流,最终获取到InputSource。

以上是将xml文件转化为输入流的流程,下面是将输入流转化为Document文件。

通过DefaultDocumentLoader中的loadDocument()方法将InputSource转化为Document,这里并没有直接这个功能而是把转化的过程转交给DocumentBuilder类实现。这里提现了java面向对象设计的单一原则,类的高内聚低耦合原则获取到Document之后。通过类BeanDefinitionDocumentReader中registerBeanDefinitions(doc, createReaderContext(resource))进行注册BeanDefinitions。在DefaultBeanDefinitionDocumentReader类中根据标签区分是自定义标签还是默认标签进行解析。如果是默认标签通过BeanDefinitionParserDelegate进行解析相关标签,最终通过BeanDefinitionReaderUtils工具类进行注册,将bean信息添加到DefaultListableBeanFactory类中的beanDefinitionMap中;如果是自定义标签通过加载META-INF文件夹下面Spring.handlers 和 Spring.schemas 文件的相关配置信息,获取对应的XSD文件以及一个Handler 文件,扩展NameSpaceHandleSupport,目的是将组件注册到Spring容器中;最终调用AbstractBeanDefinitionParser中的parse(Element element, ParserContext parserContext)方法来进行AbstractBeanDefinition的创建以及注册相关BeanDefinition


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值