bean标签的解析及注册。
2017-06-21 20:29
435 查看
前言:默认标签的解析是在parseDefaultElement函数中进行的,函数中主要分别对4种不同标签(import、alias、bean和beans)做了不同的处理,相关代码如下。
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {
// 对import标签的处理
if(delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) {
importBeanDefinitionResource(ele);
//对alias标签的处理
} else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) {
processAliasRegistration(ele);
// 对bean标签的处理
} else if(delegate.nodeNameEquals(ele, BEAN_ELEMENT)) {
processBeanDefinition(ele, delegate);
// 对beans标签的处理
} else if(delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) {
doRegisterBeanDefinitions(ele);
}
}
parseDefaultElement(ele, delegate); // 对默认标签进行解析
processBeanDefinition(ele, delegate); // 对bean标签的处理
BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele);
bdHolder = delegate.decorateBeanDefinitionIFRequired(ele, bdHolder);
BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry());
getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder));
逻辑总结如下:
1、首先委托BeanDefinitionDelegate类parseBeanDefinitionElement方法进行元素解析,返回BeanDefinitionHolder类型的实例bdHolder,经过这个方法后,bdHolder实例已经包含我们配置文件中配置的各种属性了,例如class、name、id、alias之类的属性。
2、当返回的bdHolder不为空的情况下若存在默认标签的子节点下再有自定义属性,还需要再次对自定义标签进行解析。
3、解析完成后,需要对解析后的bdHolder进行注册,同样,注册操作委托给了BeanDefinitionReaderUtils的registerBeanDefinition方法。
4、最后发出响应事件,通知相关的监听器,这个bean已经加载完成了。
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {
// 对import标签的处理
if(delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) {
importBeanDefinitionResource(ele);
//对alias标签的处理
} else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) {
processAliasRegistration(ele);
// 对bean标签的处理
} else if(delegate.nodeNameEquals(ele, BEAN_ELEMENT)) {
processBeanDefinition(ele, delegate);
// 对beans标签的处理
} else if(delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) {
doRegisterBeanDefinitions(ele);
}
}
parseDefaultElement(ele, delegate); // 对默认标签进行解析
processBeanDefinition(ele, delegate); // 对bean标签的处理
BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele);
bdHolder = delegate.decorateBeanDefinitionIFRequired(ele, bdHolder);
BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry());
getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder));
逻辑总结如下:
1、首先委托BeanDefinitionDelegate类parseBeanDefinitionElement方法进行元素解析,返回BeanDefinitionHolder类型的实例bdHolder,经过这个方法后,bdHolder实例已经包含我们配置文件中配置的各种属性了,例如class、name、id、alias之类的属性。
2、当返回的bdHolder不为空的情况下若存在默认标签的子节点下再有自定义属性,还需要再次对自定义标签进行解析。
3、解析完成后,需要对解析后的bdHolder进行注册,同样,注册操作委托给了BeanDefinitionReaderUtils的registerBeanDefinition方法。
4、最后发出响应事件,通知相关的监听器,这个bean已经加载完成了。
相关文章推荐
- bean标签的解析及注册(三)AbstractBeanDefinition属性
- 死磕Spring系列之二,bean标签的解析和BeanDefinition的注册
- bean标签的解析及注册(四)注册解析的beanDefinition
- spring bean 标签的解析和注册
- 《Spring源码深度解析》阅读笔记5-默认标签的解析之bean标签的解析及注册
- bean标签的解析及注册(二)解析BeanDefinition
- bean标签的解析及注册(四)对alias,import,beans标签的处理
- bean标签的解析及注册(一)
- Spring4.3.x 浅析xml配置的解析过程(4)——解析bean标签及其所有子标签
- 《Spring技术内幕》学习笔记4——IoC容器解析Bean定义资源并注册解析后的Bean
- SpringMVC 源代码深度解析(context:component-scan)(扫描和注册的注解Bean)
- SpringMVC 源代码深度解析 IOC容器(Bean 解析、注册)
- 4.0 spring-注册解析的Bean
- 在自定义标签子类获取Spring中注册的bean
- 【Spring源码从入门到精通】(八)解析及注册BeanDefinitions
- spring 3源码解析之如何解析"import", "alias", "bean"标签
- Spring源码学习IOC(4):IoC容器解析Bean定义资源并注册解析后的Bean
- spring技术内幕4-IoC容器解析Bean定义资源并注册解析后的Bean
- 【spring源码分析】--Bean的解析与注册
- struct2源码解读(5)之解析bean标签