码迷,mamicode.com
首页 > 编程语言 > 详细

读spring源码(二)-XmlBeanDefinitionReader-解析BeanDefinition

时间:2018-07-15 19:36:48      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:ext   col   rate   source   parser   abs   com   namespace   方法   

上次说到ApplicationContext加载BeanDefinition时会创建一个XmlBeanDefinitionReader,将XML解析、BeanDefinition加载委托给XmlBeanDefinitionReader。

首先看下XmlBeanDefinitionReader的类图:

技术分享图片

类图比较简单,其主要得属性读取,注册也是交由DefaultBeanDefinitionDocumentReader以及BeanDefinitionParserDelegate去处理。

来看下加载过程

技术分享图片

1、AbstractBeanDefinitionReader中会调用ResourceLoader将string文件地址加载为Resource,然后交由XmlBeanDefinitionReader进行加载

2、XmlBeanDefinitionReader中将资源解析为DocumentLoader将资源解析了Document,并创建BeanDefinitionDocumentReader对象将BeanDefinition的解析注册交由其处理

3、DefaultBeanDefinitionDocumentReader中的doRegisterBeanDefinitions方法会初始化BeanDefinitionParserDelegate对象,判定Element是否默认Namespace下的元素,如果是的话执行parseDefaultElement方法,进行默认元素解析,否则调用delegate.parseCustomElement(ele),执行特定NamespaceHandlerResolver的解析

4、processBeanDefinition方法中首先会调用BeanDefinitionParserDelegate的parseBeanDefinitionElement方法,这个方法中会做如下处理:

4.1 createBeanDefinition根据className,parentName调用BeanDefinitionReaderUtils.createBeanDefinition创建一个GenericBeanDefinition
4.2 parseBeanDefinitionAttributes这里解析spring里面默认的一些基础属性如:singleton,scope,lazy-init,autowire,destory-method等
4.3 parseMetaElements解析mate标签数据
4.4 parseLookupOverrideSubElements解析lookup-method标签数据
4.5 parseReplacedMethodSubElements解析replaced-method标签数据
4.6 parseConstructorArgElements解析constructor-arg标签数据
4.7 parsePropertyElements解析property标签数据
4.8 parseQualifierElements解析qualifier标签数据

5、 然后调用BeanDefinitionParserDelegate的decorateBeanDefinitionIfRequired方法,这个方法中会对属性以及子Node进行判定,如果不是默认的NameSpace的话会获取NameSpace对应的NamespaceHandlerResolver,然后进行解析,如下段代码中的c标签,p标签会分别调用SimpleConstructorNamespaceHandler,SimplePropertyNamespaceHandler对象进行解析。

<bean class="com.bread.bean.User"  c:id="123" c:userName="ace" p:id="567">

这些自定义标签的解析配置都是在META-INF/spring.handlers下,如:

http\://www.springframework.org/schema/c=org.springframework.beans.factory.xml.SimpleConstructorNamespaceHandler
http\://www.springframework.org/schema/p=org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler
http\://www.springframework.org/schema/util=org.springframework.beans.factory.xml.UtilNamespaceHandler

6、最后就是调用BeanDefinitionReaderUtils.registerBeanDefinition,这里就是将BeanDefinition交由DefaultListableBeanFactory进行注册。

 

读spring源码(二)-XmlBeanDefinitionReader-解析BeanDefinition

标签:ext   col   rate   source   parser   abs   com   namespace   方法   

原文地址:https://www.cnblogs.com/lcxdever/p/9314065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!