spring解析xml文档源码解析

xml文档的解析有两种形式:DOM解析和SAX解析,以前一直都听说spring解析xml是DOM解析,最近闲着没事翻看了spring的源码,对解析过程有了一点了解,做个记录。

spring的对象创建时由工厂完成的,顶级接口是BeanFactory,现在比较常用的是ApplicationContext。主要区别的Beanfactory只有在用到具体对象是才会创建出来,ApplicationContext在初始化spring容器时就会解析配置文件,并把所有对象创建出来。
这里研究了一下ApplicationContext的实现类XmlApplicationContext解析配置文件过程。整个过程设计的类和方法较多,这里只简单列出调用过程。

ClassPathXmlApplicationContext 构造方法
AbstractApplicationContext refresh()
获取工厂对象
AbstractApplicationContext obtainFreshBeanFactory()
AbstractRefreshableApplicationContext refreshBeanFactory()
加载配置文件(xml文件)
AbstractXmlApplicationContext loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
AbstractXmlApplicationContext loadBeanDefinitions(XmlBeanDefinitionReader reader)
AbstractBeanDefinitionReader loadBeanDefinitions(String… locations)
AbstractBeanDefinitionReader loadBeanDefinitions(String location,Set actualResources)
AbstractBeanDefinitionReader loadBeanDefinitions(Resource… resources)
XmlBeanDefinitionReader loadBeanDefinitions(EncodedResource encodedResource)
以流的形式读取配置文件内容
XmlBeanDefinitionReader doLoadDocument(InputSource inputSource, Resource resource)
XmlBeanDefinitionReader doLoadBeanDefinitions(InputSource inputSource, Resource resource)
开始注册bean
XmlBeanDefinitionReader registerBeanDefinitions(Document doc, Resource resource)
DefaultBeanDefinitionDocumentReader registerBeanDefinitions(Document doc, XmlReaderContext readerContext)
DefaultBeanDefinitionDocumentReader doRegisterBeanDefinitions(Element root)
解析具体每一个bean标签内容并实例化对象
DefaultBeanDefinitionDocumentReader parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate)
DefaultBeanDefinitionDocumentReader parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate)
DefaultBeanDefinitionDocumentReader processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate)
BeanDefinitionParseDelegate parseBeanDefinitionElement(Element ele, @Nullable BeanDefinition containingBean)
BeanDefinitionParseDelegate parseBeanDefinitionElement(Element ele, String beanName, @Nullable BeanDefinition containingBean)

发布了6 篇原创文章 · 获赞 0 · 访问量 127

猜你喜欢

转载自blog.csdn.net/li210530/article/details/95028862