zoukankan      html  css  js  c++  java
  • 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

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

    应用场景:

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

          由原来的配置方式:

    Xml代码  收藏代码
    1. <bean id="dataSource"  
    2.     class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    3.     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
    4.     <property name="url"  
    5.         value="jdbc:mysql://localhsost/freebug?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true"></property>  
    6.     <property name="username">  
    7.         <value>root</value>  
    8.     </property>  
    9.     <property name="password">  
    10.         <value>root</value>  
    11.     </property>  
    12. </bean>  
    13.   
    14. <!-- 会话 -->  
    15. <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
    16.     <property name="configLocation" value="classpath:SqlMapCommonConfig.xml" />  
    17.     <property name="dataSource" ref="dataSource" />  
    18. </bean>   

        改为:

    Xml代码  收藏代码
    1. <mysql:client id="sqlMapClient" datasouceip="localhsost"  characterEncoding="utf8"   
    2.             dbname="freebug"   username="root" password="root"  
    3.             configLocation="classpath:SqlMapCommonConfig.xml" />  

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

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

    标签定义

       定义如下:

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <xsd:schema xmlns="http://sammor.javaeye.com/schema/tags"  
    3.     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans"  
    4.     targetNamespace="http://sammor.javaeye.com/schema/tags"  
    5.     elementFormDefault="qualified" attributeFormDefault="unqualified">  
    6.     <xsd:import namespace="http://www.springframework.org/schema/beans" />  
    7.     <xsd:element name="client">  
    8.         <xsd:annotation>  
    9.             <xsd:documentation>connect to mysql</xsd:documentation>  
    10.         </xsd:annotation>  
    11.         <xsd:complexType>  
    12.             <xsd:complexContent>  
    13.                 <!-- 继承定义 从namespace="http://www.springframework.org/schema/beans" -->  
    14.                 <xsd:extension base="beans:identifiedType">  
    15.                     <xsd:attribute name="dbname" type="xsd:string" use="required" />  
    16.                     <xsd:attribute name="datasouceip" type="xsd:string"  
    17.                         use="optional" default="127.0.0.1" />  
    18.                     <xsd:attribute name="username" type="xsd:string" use="required" />  
    19.                     <xsd:attribute name="password" type="xsd:string" use="required" />  
    20.                     <xsd:attribute name="characterEncoding" type="xsd:string"  
    21.                         default="utf8">  
    22.                         <xsd:simpleType>  
    23.                             <xsd:restriction base="xsd:string">  
    24.                                 <xsd:enumeration value="utf8" />  
    25.                                 <xsd:enumeration value="gbk" />  
    26.                             </xsd:restriction>  
    27.                         </xsd:simpleType>  
    28.                     </xsd:attribute>  
    29.                     <xsd:attribute name="configLocation" type="xsd:string"  
    30.                         default="classpath:SqlMapCommonConfig.xml" />  
    31.                 </xsd:extension>  
    32.             </xsd:complexContent>  
    33.         </xsd:complexType>  
    34.     </xsd:element>  
    35. </xsd:schema>  

    说明:

    Xml代码  收藏代码
    1. xsd:element     表示定义标签  
    2. xsd:extension  如java中的继承,把现有的定义继承进来  
    3. xsd:attribute    标签带有的属性  
    4. xsd:restriction  对标签改属性进一步的限制,进行一些值的约束  

    p.s:有时,可能会在

    Xml代码  收藏代码
    1. <xsd:extension base="beans:identifiedType">  

        处报出错误

    Xml代码  收藏代码
    1. src-resolve: Cannot resolve the name 'beans:identifiedType' to a(n) 'type definition' component.  

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

    声明标签

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

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

          

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

    Xml代码  收藏代码
    1. http://sammor.javaeye.com/schema/tags/springtags.xsd=conf/springtag.xsd  

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

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

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

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

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

  • 相关阅读:
    基本sql查询语句练习
    SZU:J38 Number Base Conversion
    SZU:B54 Dual Palindromes
    SZU:A66 Plastic Digits
    HOJ:2031 进制转换
    SZU:G34 Love code
    SZU:A25 Favorite Number
    Vijos:P1001谁拿了最多奖学金
    SZU:A26 Anagram
    SZU:A12 Jumping up and down
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/7150228.html
Copyright © 2011-2022 走看看