计算机系统应用教程网站

网站首页 > 技术文章 正文

玩转Spring XML配置文件的Namespace,只要这篇文章就够了

btikc 2024-09-16 12:54:21 技术文章 24 ℃ 0 评论

我们在使用XML配置AOP、Spring事务或者dubbo的时候,会发现这些配置项的XML标签前面都有一个小小的前缀,如下图所示:

这个小小的前缀称之为xml标签的namespace,用来划定标签的作用域的。像Spring配置文件这样的XML文件,往往是会被多个模块的解析器进行解析的,这些解析器都会定义自己可以解析的标签名称,如果不做任何限定,冲突是在所难免的,引入namespace就可以很好的解决这个问题。比如上图中的aop对应的namespace只会被AOP相关的解析器解析,而不会被别人拿来使用。

确切的讲上图中的[aop]字符串并不是真正的namespace,它只是真正的namespace的一个别名,真正的namespace是在xml的开头被定义的,如下图所示:

上图中的等号左侧的[aop]字符串可以任意修改,等号右侧的字符串则是真正的namespace,是不能进行修改的。如果修改了左侧的[aop]字符串,那么在使用的时候也要进行相应的调整。假设修改为:[aop]->[poa],那么同一个xml就需要修改成如下样子:

如何自定义一个namespace

想要自定一个namespace,并完成相应的标签解析,我们需要完成一下的工作:

  1. 实现一个BeanDefinitionParser
  2. 实现一个NamespaceHandler,并为相应的标签注册parser
  3. 实现一个描述xml格式的xsd文件
  4. 在META-INF/spring.handlers文件中登记NamespaceHandler
  5. 在META-INF/spring.schemas中登记xml描述文件
  6. 在Spring配置文件中使用自定义的namespace

实现一个自定义的namespace

首先定义一个BeanDefinitionParser:

然后定义一个NamespaceHandler:

接着配置一个xml的格式描述文件:

最后在spring.handlers和spring.schemas中配置好:

通过上面几个步骤就完成了一个简单的自定namespace的定义,接下来我们对这个namespace进行测试。

beans.xml文件的内容:

测试类的内容:

测试结果:

通过上面的的内容就完整的展示了如何在Spring中自定义一个XML配置文件的namespace,下一篇文章我将会深入分析Spring中namespace扩展实现的原理。


要知其然,还要知其所以然,方能融会贯通


相关阅读:

Spring AOP是如何从XML中加载的?看了这篇文章你就懂了

Spring Boot中的消息的使用和实现原理介绍

Spring中广泛使用的扩展机制,从如何使用到实现原理


对Spring 实现原理感兴趣的朋友可以点下关注,接下来的一段时间我将会从Spring的源代码入手,详细的介绍Spring的实现原理。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表