基于Spring开发之自定义标签及其解析
Spring框架是现在Java最流行的开源框架之一,需要实现一些自定义的标签,主要是方便使用我们框架的人能够快速、简单进行配置。自定义标签的实现离不开XML Schema的定义,我们可以参照spring-beans.xsd来进行自定义标签的定义。
我们需要定义一个最简单的标签,例如:<bf:head-routing key="1" value="1" to="test2"/>该标签只包含了若干属性,我们就在xsd文件中这么定义:
<!-- 声明一个标签,名字为head-routing,他的类型为headRouting-->
<xsd:element name="head-routing" type="headRouting"></xsd:element>
<!-- 定义head-routing的类型,这里定义它有key,value,to,patten四个属性 -->
<xsd:complexType name="headRouting">
<xsd:attribute name="key" type="xsd:string" use="required"></xsd:attribute>
<xsd:attribute name="value" type="xsd:string" use="required"></xsd:attribute>
<xsd:attribute name="to" type="xsd:IDREF" use="required"></xsd:attribute>
<xsd:attribute name="patten" type="xsd:string" default="string"></xsd:attribute>
</xsd:complexType>
在<xsd:attribute>标签中的type是用来定义该属性的格式,例如xsd:string 表示是一个字符串,对格式没什么要求;xsd:id 表示该属性的值是一个id,有格式要求(例如不能以数字开头);xsd:IDREF 表示该属性的值与某xsd:id属性的值对应等等。
另外,我们还可以定义复杂点的标签,所谓复杂,其实就是嵌套的标签,例如:<bf:stop id="test1" ref="testNode"> <bf:head-routing key="1" value="1" to="test2"/> </bf:stop>
我们可以参照Spring 中<bean>标签的xsd依葫芦画瓢,首先是定义stop标签:
<xsd:element name="stop">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="beans:identifiedType">
<xsd:group ref="stopElements"/>
<xsd:attributeGroup ref="stopAttributes"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
其中,<xsd:extension base="beans:identifiedType"> 定义了该标签的id属性,注意这里引用的是spring-beans中的type,<xsd:group ref="stopElements"/>中定义了<bf:stop>标签允许的子标签,<xsd:attributeGroup ref="stopAttributes"/> 定义了<bf:stop>标签允许的属性。
通过定义XML Schema,我们可以实现自定义标签,并且可以在Spring框架下使用这些标签,方便使用我们框架的人能够快速、简单进行配置。