孙哥Spring源码第四集

第四集 自定义标签的解析下

【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】
BeanFactroy如何解析自定义标签,最终还是会封装成BeanDefinition,来存储在BeanFactory里面的BeanDefinitionMap中。

4.1 如何解析自定义标签呢?

所有的自定义标签 [ [ 都会有ssd和schema对于它们的解析是分为两步的。
第一步把对应的schema也就是相应的url和它对应的handler进行匹配

{width=“5.766666666666667in”
height=“0.3298611111111111in”}

第二步这个schema 最终会由我们这个handler来完成处理,
作为我们这个handler来讲,它里面会初始化各自的子标签,
比如annotation-driven,defalut-servlet-handler,每一个子标签的解析又交给了parser来完成,所以最终对于自定义标签的解析。

孙哥Spring源码第四集_第1张图片{width=“5.7652777777777775in”
height=“2.0131944444444443in”}

解析的核心实际上是通过handler 去找对应
Parser,Parser来完成对于自定义标签的解析把它封装成
BeanDefinition,这就是一个完整性的过程。

4.2 自定义标签解析源码分析 delegate.parseCustomElement(ele);分析

上节课我们也给大家写了自定义标签的解析方式,让大家更好的体会了这个效果,这就是我们说的这个MyNamespaceHandler里面专门解析了user标签,用了UserBeanDefinitionParaer类,最终在UserBeanDefinitionParaer里面完成了所涉及到的相关属性,以及对应对象的封装和构建,最后完成了相应的效果,这是
我们上节课所讲解的核心内容。

接下来我们就要以源码的角度来看一看我们所讲的handler,包括parser它是如何在代码中体现的换句话来说
就是在自定义标签解析是如何完成相应操作的,这就是我们接下来要做的事情,也就是parseCustomElementa它是怎么来做的,这是对于自定义标签的解析方式。

进入代码

孙哥Spring源码第四集_第2张图片{width=“5.759027777777778in”
height=“2.7680555555555557in”}解析自定义标签

孙哥Spring源码第四集_第3张图片{width=“5.7625in” height=“3.647222222222222in”}

4.2.1 getNamespaceURI(ele);

孙哥Spring源码第四集_第4张图片{width=“5.761805555555555in”
height=“1.6833333333333333in”}

主要用于获取自定义标签的uri,uri:http://www.springframework.org/schema/mvc跟spring是没有任何关系的,这个方法是底层w3c处理的。
孙哥Spring源码第四集_第5张图片{width=“5.761805555555555in” height=“1.91875in”}

4.2.2 resolve(namespaceUri);

孙哥Spring源码第四集_第6张图片{width=“5.761111111111111in”
height=“2.5368055555555555in”}

孙哥Spring源码第四集_第7张图片{width=“5.7652777777777775in”
height=“1.8152777777777778in”}
根据uri获取来对应的handler,这个对应关系在程序中是有所体现吗,根据uri获取handler这种对应关系在程序当中是有所体现的,在哪体现呢?在spring.handlers中体现
uri=handler 对应关系
所以才可以获取对应的handler,核心的主旨就是读这儿的文件,一旦我们获取了uri对应的handler之后,就紧接着执行handler相关的功能
是一定要回调init()的。

孙哥Spring源码第四集_第8张图片{width=“5.763194444444444in”
height=“3.0861111111111112in”}

init的方法我们仅仅做了覆盖,仅仅做了实现,那么我们有没有调用它?没有,一定是spring调用,当我们拿到handler之后,当spring拿到handler之后那它下意识的一个工作,一定会调handler的init方法,调用init方法的目的是
发现自定义标签 user
以及作为自定义标签所对应的Parser,有这了这个Parser就可以解析 标签元素
最终封装成BeanDefinition,而我讲的这一套东西
最终应该发生在哪?最终应该发生在下面的这个操作过程当中,我们所说的最后一步操作。
孙哥Spring源码第四集_第9张图片{width=“5.764583333333333in”
height=“1.2201388888888889in”}

4.2.3 handler.parse

根据handler中的init方法来获得对一个标签的parse操作,这就是最后一个方法所做的事儿。

孙哥Spring源码第四集_第10张图片{width=“5.7625in” height=“1.7618055555555556in”}

孙哥Spring源码第四集_第11张图片{width=“5.758333333333334in”
height=“2.9965277777777777in”}

你可能感兴趣的:(java,spring)