spring 3源码解析之如何解析"import", "alias", "bean"标签
解析的步骤:
1、加载web.xml、加载监听器
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
2、ContextLoaderListener
初始化initWebApplicationContext方法创建
org.springframework.web.context.support. XmlWebApplicationContext对象
3、XmlWebApplicationContext
调用loadBeanDefinitions方法,该方法主要做两件事情:初始化XmlBeanDefinitionReader、获取applicationContext.xml配置文件的路径、然后把事情交给XmlBeanDefinitionReader来处理
4、XmlBeanDefinitionReader
获取到applicationContext.xml配置文件的路径、读取配置文件的内容得到一个输入流、对输入流转码操作、然后封装成一个inputSource对象、再然后封装成一个document对象;在生成document对象的同事也生成了一个Resource对象、这两个对象分部是:document对象承载配置文件的主要内容信息、Resource承载配置文件的描述信息以及一些验证信息。
再由Resource对象创建一个XmlReaderContext。完成了以上操作XmlBeanDefinitionReader就把document对象和XmlReaderContext对象交给DefaultBeanDefinitionDocumentReader来处理
5、DefaultBeanDefinitionDocumentReader
1)、对XmlReaderContext装饰成一个BeanDefinitionParserDelegate对象;
2)、迭代document对象、把document对象拆分成Element元素逐个逐个解析;
3)、使用BeanDefinitionParserDelegate装饰对象解析Element元素或者说标签。
这里的Element元素有两种:一种是DefaultElement、另一种是CustomElement;DefaultElement包括alias、import、bean,CustomElement包—efaultElement以外的所有元素
我们所关心的应该是第一中元素DefaultElement,看下DefaultBeanDefinitionDocumentReader解析该元素的方法:
解析alias标签的方法:
解析bean标签的方法:
方法调用关系图:
未完待续...
