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"
- 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的规范学习,还有很多很多,它是一个强大的规范,可以为我们做很多的基础信息和约束,为使用者提供更安全方便的做法。
spring自定义标签之 规范定义XSD的更多相关文章
- spring自定义标签之 自我实现
引言: 最近心情比较难以平静,周末的两天就跑出去散心了,西湖边上走走,看日落,还是不错的.回来博客上发现,在自定义标签上,最后一步实现忘记加上了.其实,人生的路程中,我们总是实现着自我的价值,让自己 ...
- spring基础---->spring自定义标签(一)
Spring具有一个基于架构的扩展机制,可以使用xml文件定义和配置bean.本博客将介绍如何编写自定义XML bean的解析器,并用实例来加以说明.其实我一直相信 等你出现的时候我就知道是你. Sp ...
- spring自定义标签学习
看到几篇很全的自定义标签,从定义到使用,写的很好. 这里我也是在那里学习的,对学习spring源码也很有帮助. 贴出来与大家共享. http://sammor.iteye.com/blog/11009 ...
- Spring 自定义标签配置
前景:经常使用一些依赖于Spring的组件时,发现可以通过自定义配置Spring的标签来实现插件的注入,例如数据库源的配置,Mybatis的配置等.那么这些Spring标签是如何自定义配置的?学习Sp ...
- spring 自定义标签的实现
在我们进行Spring 框架开发中,估计用到最多的就是bean 标签吧,其实在Spring中像<mvc/><context/>这类标签以及在dubbo配置的标签都是属于自定义的 ...
- 这一次搞懂Spring自定义标签以及注解解析原理
前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的.同时我们常用的注解如:@Se ...
- Spring自定义标签
一.原理: 1.Spring通过XML解析程序将其解析为DOM树, 2.通过NamespaceHandler指定对应的Namespace的BeanDefinitionParser将其转换成BeanDe ...
- 自己构建一个Spring自定义标签以及原理讲解
平时不论是在Spring配置文件中引入其他中间件(比如dubbo),还是使用切面时,都会用到自定义标签.那么配置文件中的自定义标签是如何发挥作用的,或者说程序是如何通过你添加的自定义标签实现相应的功能 ...
- Spring自定义标签解析与实现
在Spring Bean注册解析(一)和Spring Bean注册解析(二)中我们讲到,Spring在解析xml文件中的标签的时候会区分当前的标签是四种基本标签(import.alias ...
随机推荐
- button的onclick函数一直刷新
button中的onclick写成函数时需要 <button onclick="return function();"></button> 加一个retur ...
- Servlet实现禁用cookie重写URL获取session
前言 一个女人让他的程序员丈夫去商店买东西:你去附近的商店买些鸡蛋,如果有香蕉的话,买8个回来,这个丈夫买了8个鸡蛋回来,他的妻子大吃一惊:你为什么买了8个鸡蛋?! 程序员丈夫回答:因为他们有香蕉. ...
- for循环枚举法,全排列+dfs,补充浮点数注意事项
其实这个题目我一直没想好应该叫什么,就是在做蓝桥杯的时候会遇到很多的题,给你一等式,abcdef...分别是1-9(||12||15)不重复问你有几种方案? 我之前一直都是用的for循环在做,听说这叫 ...
- Oracle TNS Listener Remote Poisoning
Oracle TNS Listener Remote Poisoning 远程数据投毒漏洞(CVE-2012-1675) 1.漏洞简介: 允许攻击者在不提供用户名/密码的情况下,向远程“TNS Lis ...
- HDU6333-2018ACM暑假多校联合训练1002-Harvest of Apples-莫队+费马小定理
题意很简单啦,求S(n,m)的值 通过打表我们可以知道 S(n + 1, m) = S(n, m) * 2 - C(n, m); S(n - 1, m) = (S(n, m) + C(n - 1, m ...
- MySQL直接导出CSV文件,并解决中文乱码的问题
需求: 需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件. 在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决. 1. 生成文件不成 ...
- NTP搭建指南
NTP搭建指南 前言: NTP是网络时间协议(Network Time Protocol),用于全球的标准时间(UTC)的校正. 一般NTP 服务有不同的层次:一层是源头NTP 服务器,一层服务器都设 ...
- PyQt5(1)——Qt Designer初探
相关环境配置我们就不介绍了(网上有很多教程) Qt Designer 是一款十分强大的GUI工具,生成的文件为 .UI文件 可以通过命令转化为Py文件,简单来说我们可以通过拖拽方式生成界面,在通过简 ...
- 手动博客重定向 https://www.cnblogs.com/kelthuzadx/
https://www.cnblogs.com/kelthuzadx/ 博客狂魔又㕛叒换地址了
- Hibernate 使用注释书写配置文件
Hibernate 使用注释 Hibernate使用注释有个好处就是我们不需要建立.hbm.xml文件,直接在实体类中添加注解就可以完成往数据库中进行数据操作 配置文件:hibernate.cfg.x ...