Spring XML Schema扩展机制怎么用

  介绍

这篇文章主要介绍Spring XML Schema扩展机制怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

前言

在当前Java生态,春天算的上是最核心的框架,所有的开发组件想要得到大范围更便捷的使用,都要和春天进行整合,比如我们熟知的Mybatis,达博等,以及内部封装的各类组件包括复述,MQ,配置中心等。

有了整合这一步,我们只需引入相应的jar,比如mybatis-spring,然后进行简单的配置后即可在春天工程中使用Mybatis的功能,也正是由于这样的便捷性,导致很多时候我们没有对其进行深究。

XML Schema扩展

打开mybatis-spring,达博的源码会发现在meta - inf目录下有两个文件(如下图所示),spring.handlers与春天。模式,这两个文件就是XML Schema扩展的关键入口点。

 Spring XML Schema扩展机制怎么用“> </p> <h3> XSD <br/> </h3> <p> XSD, XML模式定义,XML定义。</p> <p> XML Schema定义XML文档的结构,XML Schema语言也称为XML定义,即XSD。</p> <p>简单的说,XSD用于制定XML文件规范,包括XML中的元素(简单元素,复杂元素),属性,以及属性类型及约束等。</p> <p> Spring XML Schema扩展的第一步就是要定义一个XSD文件,比如Spring bean对应XSD文件为http://www.springframework.org/schema/beans/spring-beans.xsd,如下图:</p> <p> <img src= & lt; ? xml  version=?.0“,编码=癠TF-8" ?比;   & lt; xsd: schema  xmlns=癶ttp://www.hexup.com/schema/distributed-id"   ,,,,,,,,,,,xmlns: xsd=癶ttp://www.w3.org/2001/XMLSchema", targetNamespace=癶ttp://www.hexup.com/schema/distributed-id"比;         ,,,& lt; xsd: element  name=癲istributed-id"比;   ,,,,,,,& lt; xsd: complexType>   ,,,,,,,,,,,& lt; xsd: attribute  name=癷d",类型=皒sd: string"祝辞& lt;/xsd: attribute>   ,,,,,,,,,,,& lt; xsd: attribute  name=癰izCode",类型=皒sd: string"祝辞& lt;/xsd: attribute>   ,,,,,,,,,,,& lt; xsd: attribute  name=發ength",类型=皒sd: int"祝辞& lt;/xsd: attribute>   ,,,,,,,& lt;/xsd: complexType>   ,,,& lt;/xsd: element>   ,,,,,,,,,,,   & lt;/xsd: schema>

上述xsd文件里定义了一个复杂元素distributed-id,包含属性id, bizCode,长度,形如:

& lt; distributed-id  id=皒xx", bizCode=皒xx",长度=皒xx"祝辞& lt;/distributed-id>

注意:xmlns,即为xml名称空间的xml命名空间,后面跟的http链接地址可以不存在,因为xsd会放在当前工程的meta - inf下。

配置spring.handlers和spring.schemas

如下两张图所示,spring.schemas文件中用于说明xsd的文件路径,春天。模式文件用于说明解析此类xsd定义的标签的处理类、下面会对处理类进行详细说明。

 Spring XML Schema扩展机制怎么用“> </p> <h3> NameSpaceHandler与BeanDefinitionParser <br/> </h3> <p>定义类DistributedIdNamespaceHandler继承NamespaceHandlerSupport,初始化方法用于注册BeanDefinition解析器,也就是解析XML中对应标签为Spring Bean。</p> <pre类= public  class  DistributedIdNamespaceHandler  extends  NamespaceHandlerSupport  {      ,,@Override   ,,,public  void  init (), {   ,,,,,,,registerBeanDefinitionParser (“distributed-id",, new  DistributedIdParser ());   ,,,}   }

同时要创建BeanDefinitionParser

public  class  DistributedIdParser  implements  BeanDefinitionParser  {         ,,@Override   ,,,public  BeanDefinition 解析(Element 元素,ParserContext  parserContext), {   ,,,,,,,//,解析xml内的标签   ,,,,,,,String  bizCode =, element.getAttribute (“bizCode");   ,,,,,,,int  length =, Integer.valueOf (element.getAttribute (“length"));   ,,,,,,,String  id =, element.getAttribute (“id");   ,,,,,,,   ,,,,,,,//,创建DistributedIdFactoryBean  bean   ,,,,,,,BeanDefinitionBuilder  builder =, BeanDefinitionBuilder.genericBeanDefinition ();   ,,,,,,,builder.getRawBeanDefinition () .setBeanClass (DistributedIdFactoryBean.class);   ,,,,,,,builder.setScope (BeanDefinition.SCOPE_SINGLETON);      ,,,,,,,builder.addPropertyValue (“bizCode",, bizCode);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Spring XML Schema扩展机制怎么用