上一节的xml解析成BeanDefinition中讲到了
XmlBeanDefinitionReader 委托DefaultBeanDefinitionDocumentReader 来解析xml文件
DefaultBeanDefinitionDocumentReader 委托 NamespaceHandler 来解析Document的Element
NamespaceHandler 委托 BeanDefinitionParser 来解析Element中的tag,
那么这次我们尝试自己命名一个dubbo类似的命名空间,暂时取名<custom>
其实自定义命名空间及实现,需要做以下几步:
1:声明命名空间,创建xsd文件
2:创建spring.schames文件。指定命名空间的xsd路径,
3:自定义实现命名空间的处理器-CustomNamespaceHandler,并创建spring.handlers指定该处理器
4:自定义实现<custom>的BeanDefinition解析器 CustomBeanDefinitionParser。并注册到customNamespaceHandler中。
5:配置<custom>的资源文件,
6:启动测试。
我们按照上面的步骤,简单的实现一下
第一步:首先创建一个简单的maven工程,spring-custom-namespace。添加基础依赖 spring-beans
第二步:在src目录中新建custom.xsd,然后模仿spring-beans.xsd文件的格式描写自己的标签
xsd主要有几个要素 1:xmlns/targetNamespace,2<xsd:element>
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 要声明自己的shema xmlna = http://com.david.study.spring/schema/beans 并且注意,xmlns 要和 targetNameSpace 成对出现-->
<xsd:schema xmlns="http://com.david.study.spring/schema/custom"
xmlns:xsd="ht