博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring源码学习笔记2
阅读量:7240 次
发布时间:2019-06-29

本文共 1674 字,大约阅读时间需要 5 分钟。

1.默认标签的解析

对四种不同标签的解析

private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {        if (delegate.nodeNameEquals(ele, "import")) {            this.importBeanDefinitionResource(ele);        } else if (delegate.nodeNameEquals(ele, "alias")) {            this.processAliasRegistration(ele);        } else if (delegate.nodeNameEquals(ele, "bean")) {            this.processBeanDefinition(ele, delegate);        } else if (delegate.nodeNameEquals(ele, "beans")) {            this.doRegisterBeanDefinitions(ele);        }    }
protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) {        BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele); //1        if (bdHolder != null) {            bdHolder = delegate.decorateBeanDefinitionIfRequired(ele, bdHolder);//2            try {                BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, this.getReaderContext().getRegistry());//3            } catch (BeanDefinitionStoreException var5) {                this.getReaderContext().error("Failed to register bean definition with name '" + bdHolder.getBeanName() + "'", ele, var5);            }            this.getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder));        }    }

1)首先委托BeanDefinitionDelegate类的parseBeanDefinitionElement方法进行元素解析,返回BeanDefinitionHolder类型的实例bdHolder,经过这个方法后,bdHolder实例已经包含配置文件中配置的各种属性了,例如class、name、id、alias之类的属性

2)当返回的bdHolder不为空的情况下若存在默认标签的子节点下再有自定义属性,还需要再次对自定义标签进行解析

3)解析完成后,需要对解析后的bdHolder进行注册,注册操作委托给了BeanDefinitionReaderUtils的registerBeanDefinition方法。

4)发出响应事件,通知相关的监听器

转载于:https://www.cnblogs.com/lvjygogo/p/9040618.html

你可能感兴趣的文章
HDU2037 今年暑假不AC 【贪心】
查看>>
[Oracle] - 性能优化工具(1) - AWR
查看>>
memcached Java Client
查看>>
codeforces #261 C题 Pashmak and Buses(瞎搞)
查看>>
体系结构复习2——指令级并行(分支预測和VLIW)
查看>>
PHP——0126最初
查看>>
求最小的k个数
查看>>
Sequence operation(线段树区间多种操作)
查看>>
怎样解决Ubuntu发热严重地问题
查看>>
申请付费苹果开发者账号 注意事项及流程 (转)
查看>>
ThinkPHP 3.2.3 数据缓存与静态缓存
查看>>
2-7-集合运算(A-B)∪(B-A)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
查看>>
Linux中设置服务自启动的三种方式
查看>>
友盟新功能介绍:在线参数-备用
查看>>
RAC object remastering ( Dynamic remastering )
查看>>
Log4net使用(一)
查看>>
[Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
查看>>
PopUpWindow使用详解(二)——进阶及答疑
查看>>
史上最完整的Android开发工具集合
查看>>
Pythonn new-style class and old-style class
查看>>