IOC容器构造之加载和解析配置文件

来源:互联网 发布:何方抢票软件 编辑:程序博客网 时间:2024/06/15 18:06

资源文件的定位已分析完,接下来便是加载和解析配置文件。如果资源文件都已经定位到了,加载配置文件这一步也就算完成了。那么本篇文章的重点就是解析配置文件了。这个解析有两层的解析关系。第一层的解析是按照正常的XML文件的解析方式来解析配置文件。第二层的解析是在第一层解析的基础上,按照Spring的Bean的配置规则再来解析一次。
意思就是说配置文件中关于Bean的配置项,在经过第二层的解析之后,就会被映射到Ioc内部的数据结构BeanDefinition中,并保存起来。保存这个步骤,其实就是BeanDefinition的注册过程,这个下一篇文章会详细介绍。解析的大致原理了解了之后,接下来就去Spring源码中看看具体的实现。
上一篇分析到定位资源文件
那么我们接着这个方法往下走。从loadBeanDefinitions方法一直跟到XmlBeanDefinitionReader类的loadBeanDefinitions方法。解析xml文件的入口
这个方法是解析XML配置文件的入口,分析下其具体实现。
具体实现
第一处红色标记处首先获取Resource对象,然后根据Resource对象中的配置文件的路径,将配置文件转换成流的形式。上一篇文章我们分析到了配置文件的定位,那么定位到的路径信息存放在何处了呢?因为后面的操作依赖这个路径。原来路径存放在了Resource对象的path属性中了。可以得出结论,Resource对象对配置文件进行了封装。
Resource对象的作用
获取到配置文件的路径之后,需要将配置文件以流的形式读取进来。此处Resource的实现类为ClassPathResource。
将配置文件转换成流的形式
将配置文件转换成流以后,传给InputSource对象,InputSource并不是Spring里的类,而是SAX中的,说明Spring解析XML用的是SAX的方式。
接着看第二处红色标记,它的作用不用猜都知道,肯定有解析配置文件的功能。跟进去see see。

从图中可以看出逻辑很清晰,三个方法完成三件事情,第一件事获取XML的验证模式,第二件事将配置文件的流解析成Document。第三件事按照Spring的Bean的配置规则来解析Document。跟着registerBeanDefinitions(doc, resource)方法来到DefaultBeanDefinitionDocumentReader类的doRegisterBeanDefinitions方法。
解析XML文件
这个方法主要实现两个功能,创建解析对象BeanDefinitionParserDelegate并利用其解析配置的Bean的信息。
进入parseBeanDefinitions方法。
按照Bean的配置规则解析XML文档
parseBeanDefinitions根据Spring中Bean的配置规则来解析Document对象。进入parseDefaultElement方法,会发现列举了对四类标签的处理,分别是import,alias,bean和beans。我们以bean为代表看看其具体解析过程。
标签的解析
这个方法里面重要的方法比较多,但现在我们只关心对标签的解析功能。
11
12
13
这个方法里有id,name,aliase等属性的解析,其它标签及属性的解析过程,感兴趣的朋友可以仔细研究。
解析完之后会把解析结果放到BeanDefinition中并设置到BeanDefinitionHolder中保存起来。到这里配置文件的解析差不多也就完成了。解析配置文件的实质是按照Spring的Bean的配置规则解析XML文件。而解析配置规则的实质又是解析标签信息,那么解析的整个过程就是根据Bean的配置信息,将其解析成Spring内部的数据结构BeanDefinition,并封装成BeanDefinitionHolder对象保存起来。
未完待续。。。。。。

0 0
原创粉丝点击