读书人

spring自定义标签之二 轨范定义X

发布时间: 2012-06-27 14:20:08 作者: rapoo

spring自定义标签之二 —— 规范定义XSD

引言:

?????? spring的配置文件中,一切的标签都是spring定义好的。<bean/>等等,有了定义的规范,才能让用户填写的正常可用。想写自定义标签,但首先需要了解XML Schema Definition(XSD) 的。

?

标签定义:

?????? 对于该类标签的定义,spring中有着相应的XSD定义文档

?????? http://www.springframework.org/schema/beans

?

?????? 对于XSD,简单的说是xml的一个标签的定义,在这里就不对XSD过多的解释了,祥见

?????? http://www.w3school.com.cn/schema/schema_example.asp

?????? 这里就简单就应用中会经常碰到的一些定义进行说明一下。

?

应用场景:

????? 对数据库连接进行进一步的封装,使配置简单化。

????? 由原来的配置方式:

<bean id="dataSource"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://localhsost/freebug?useUnicode=true&characterEncoding=utf8&autoReconnect=true"></property><property name="username"><value>root</value></property><property name="password"><value>root</value></property></bean><!-- 会话 --><bean id="sqlMapClient" value="classpath:SqlMapCommonConfig.xml" /><property name="dataSource" ref="dataSource" /></bean>?

??? 改为:

<mysql:client id="sqlMapClient" datasouceip="localhsost"  characterEncoding="utf8"             dbname="freebug"   username="root" password="root"            configLocation="classpath:SqlMapCommonConfig.xml" />

?? 从这里面,对配置进行了一次简化的处理。其他很多的信息属性还可以进行默认和正则式的限制。

?

?? 如何做到使上面的配置可以成立,这就要求着,对这个标签进行xsd规范的定义。

?

标签定义

?? 定义如下:

<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns="http://sammor.javaeye.com/schema/tags"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans"targetNamespace="http://sammor.javaeye.com/schema/tags"elementFormDefault="qualified" attributeFormDefault="unqualified"><xsd:import namespace="http://www.springframework.org/schema/beans" /><xsd:element name="client"><xsd:annotation><xsd:documentation>connect to mysql</xsd:documentation></xsd:annotation><xsd:complexType><xsd:complexContent><!-- 继承定义 从namespace="http://www.springframework.org/schema/beans" --><xsd:extension base="beans:identifiedType"><xsd:attribute name="dbname" type="xsd:string" use="required" /><xsd:attribute name="datasouceip" type="xsd:string"use="optional" default="127.0.0.1" /><xsd:attribute name="username" type="xsd:string" use="required" /><xsd:attribute name="password" type="xsd:string" use="required" /><xsd:attribute name="characterEncoding" type="xsd:string"default="utf8"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="utf8" /><xsd:enumeration value="gbk" /></xsd:restriction></xsd:simpleType></xsd:attribute><xsd:attribute name="configLocation" type="xsd:string"default="classpath:SqlMapCommonConfig.xml" /></xsd:extension></xsd:complexContent></xsd:complexType></xsd:element></xsd:schema>
?

说明:

xsd:element     表示定义标签xsd:extension  如java中的继承,把现有的定义继承进来xsd:attribute    标签带有的属性xsd:restriction ?对标签改属性进一步的限制,进行一些值的约束

p.s:有时,可能会在

<xsd:extension base="beans:identifiedType">

??? 处报出错误

src-resolve: Cannot resolve the name 'beans:identifiedType' to a(n) 'type definition' component.

??? 请跳过,这个不影响使用,只是ide的检查有问题。

?

声明标签

???? 对于写好的标签定义需要把他公布到应用中,使其他spring的xml中,可用,需要几步:

1、在classpath资源路径下加入文件:

????? spring自定义标签之二 —— 轨范定义XSD

?2、spring.schemas该文件中填写:

http\://sammor.javaeye.com/schema/tags/springtags.xsd=conf/springtag.xsd

???? 其中http后的“\”为转义的意思

?

?3、在spring的配置文件xml头部加入

spring自定义标签之二 —— 轨范定义XSD

?在配置文件中声明引用xsd定义

?

当然,到这一步的时候,还仅是对定义一种自定义标签的写法,接下来,如何去做到标签的实现处理,还要做进一步的处理。spring自定义标签之三 —— 自我实现

?

p.s 关于xsd的规范学习,还有很多很多,它是一个强大的规范,可以为我们做很多的基础信息和约束,为使用者提供更安全方便的做法。

?

?

其他相关文章:

spring自定义标签之一 —— 意义思考

spring自定义标签之三 —— 自我实现

?

1 楼 mozhenghua 2011-06-29 很详细呀,我先学习一下

读书人网 >软件架构设计

热点推荐