首先,在我的这篇博客中已经说到容器是怎么初步实现的,并且要使用XmlBeanDefinitionReader
对象对Xml
文件进行解析,那么Xml
文件是如何进行解析的,将在这片博客中进行一些陈述.
数据准备阶段
准备的目的是封装resource
参数,目的是为了考虑到Resource
可能存在编码要求的情况,其次,通过SAX
读取XML
文件的方式来准备InputSource
对象,最后将参数传递到最核心的实现部分doLoadBeanDefinitions(inputSource,encodedResource.getResource())
封装Resource
调用XmlBeanDefinitionReader
的loadBeanDefinitions(Resource resource)
方法时,首先将resource对象进行再次封装成EncodedResource
,查看源码可以发现里面增加了字符集和编码的封装,从命名上来看也可以体现出来,将资源封装完成后,就调用重载的同名函数loadBeanDefinitions(EncodedResource resource)
进行正式的解析.
数据准备操作
在重载方法里面首先通过Set<!-- <EncodedResource> --> currentResources
属性来记录已经加载的资源,其次,从EncodedResource
对象中获取封装好的Resource
对象,并获取其inputStream
,将获取到的输入流与SAX解析的InputSource
绑定,接下来就进入到了核心的实现部分:doLoadBeanDefinitions(inputSource,encodedResource.getResource())