精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-23
最后修改:2011-06-27
引言: 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" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" 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" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" 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资源路径下加入文件:
2、spring.schemas该文件中填写: http\://sammor.javaeye.com/schema/tags/springtags.xsd=conf/springtag.xsd 其中http后的“\”为转义的意思
3、在spring的配置文件xml头部加入 在配置文件中声明引用xsd定义
当然,到这一步的时候,还仅是对定义一种自定义标签的写法,接下来,如何去做到标签的实现处理,还要做进一步的处理。spring自定义标签之三 —— 自我实现
p.s 关于xsd的规范学习,还有很多很多,它是一个强大的规范,可以为我们做很多的基础信息和约束,为使用者提供更安全方便的做法。
其他相关文章:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-06-29
很详细呀,我先学习一下
|
|
返回顶楼 | |
浏览 3367 次