spring parseCustomElement 源码分析和扩展自定义标签

本文介绍如何使用Spring框架实现自定义XML标签的解析过程,包括配置文件、处理类及解析器的设计与实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节主要讲parseCustomElement 解析自定义标签和扩展自定义标签,找到方法

 

 

这里需要注意的是readerContext对象是前面已经实例化了的,createReaderContext方法中创建的,如下图:

 

 

我们再看下方法:getNamespaceHandlerResolver,

 

 

 

 

 

这里注意看下变量:DEFAULT_HANDLER_MAPPINGS_LOCATION的值:

META-INF/spring.handlers,也就是在这个路径下读取配置文件

 

这个类中还有两个重要的方法,后续都会用到,getHandlerMappings方法和resolve方法,

 

resolve方法:

 

再回到前面:

调用方法resolve获取解析的处理类

执行init方法:

 

接下来就是解析标签了:

handler.parse(ele, new ParserContext(this.readerContext, this, containingBd))

 

找到BeanDefinitionParser接口

 

获取到标签的parser类了,

 

 

 

进入类:

 

 

 

 

 

进入具体解析的标签类的方法:doParse方法处理:先执行父类的解析方法,再执行自己的解析方法

 

 

 

解析完标签之后,就是注册BeanDefinition了,进入方法:registerBeanDefinition

 

 

 

最终放入容器中:

下面讲解自定义标签<lyh:user />

 

1 创建一个对应的解析处理类(在init方法中添加parser类)

2 创建一个普通的spring.handlers配置文件,让应用程序能够完成加载工作

3 创建对应的标签的parser类(对当前标签的其他属性值进行解析工作)

1 新建一个user对象

2 定义UserBeanDefinitionParser解析类,继承AbstractSingleBeanDefinitionParser

3 定义UserNamespaceHandler类

4、在resource目录下创建META-INF目录下,并创建三个文件

4.1 Spring.handlers

http\://www.liyanghao.com/schema/user=com.lyh.selftag.UserNamespaceHandler

 

 

4.2 Spring.schemas

http\://www.liyanghao.com/schema/user.xsd=META-INF/user.xsd

 

user.xsd

 

5 创建配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:lyh="http://www.liyanghao.com/schema/user"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.liyanghao.com/schema/user http://www.liyanghao.com/schema/user.xsd">

<lyh:user id = "user" userName = "lyh" email = "9022@qq.com" password="123456"/>

</beans>

 

6 编写测试类

7 执行结果:

 

到这里自定义标签就结束了,spring源码后续知识继续讲解。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值