Spring自定义标签的SPI机制

本文深入解析Spring框架中自定义标签的SPI(Service Provider Interface)机制。通过分析ClassPathXmlApplicationContext的XML解析过程,特别是针对context自定义标签的处理,详细阐述了SPI如何工作。从读取META-INF/spring.handlers文件、获取NamespaceHandler处理类到标签解析的整个流程,揭示了Spring如何利用SPI实现标签解析的灵活性和扩展性。
摘要由CSDN通过智能技术生成

读spring源码。最开始的ClassPathXmlApplication上下文用来解析xml的标签,封装成beanDefinition对象。其中自定义标签涉及的spi机制就是本章节的重点探讨的内容。

首先,先看xml解析过程中。拿context自定义标签来举例子,探讨一下spi机制,上源码。
下面这段源码是自定义标签解析的代理类BeanDefinitionParserDelegate
在这里插入图片描述
这段代码分3步:
第一步:获取默认的处理类 DefaultNamespaceHandlerResolver,默认读取META-INF/spring.handlers 目录下的文件

在这里插入图片描述
第二步:通过URI获取对应的NamespaceHandler处理类。首先是从META-INF/spring.handlers 文件读取到对应的<命名空间,处理类的全路径>的映射关心,通过URI获取处理类实例。

在这里插入图片描述
第三步:接下来就是标签解析工作了。
handler.parse(ele, new ParserContext(this.readerContext, this, containingBd));

步骤上面已经理清楚了,我们来细看一下,spi机制具体是如何实现的,主要在第二步实现的。
首先,我们是研究context标签为例进行探讨的,先看一下context下的META-INF/spring.handlers

在这里插入图片描述
下面是<命名空间,标签处理类的全限定名>的映射关系,这里面就使用了SPI机制

在这里插入图片描述
上面说的处理类的实例化的时候,会调用init()方法。

在这里插入图片描述
我们来看一下context处理类的init方法。可以发现,context标签处理类里面注册了很多,标签解析器,并把相应的解析器放入到了一个map中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
OK! 到此context标签的各种属性的解析器全部封装准备好了,现在回到最初的第三部,从标签中获取属性,得到对接的解析器,然后就可以实现属性的功能。
在这里插入图片描述
到此讲解完毕!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值