这篇文章主要介绍Spring XML Schema扩展机制怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
前言
在当前Java生态,春天算的上是最核心的框架,所有的开发组件想要得到大范围更便捷的使用,都要和春天进行整合,比如我们熟知的Mybatis,达博等,以及内部封装的各类组件包括复述,MQ,配置中心等。
有了整合这一步,我们只需引入相应的jar,比如mybatis-spring,然后进行简单的配置后即可在春天工程中使用Mybatis的功能,也正是由于这样的便捷性,导致很多时候我们没有对其进行深究。
XML Schema扩展
打开mybatis-spring,达博的源码会发现在meta - inf目录下有两个文件(如下图所示),spring.handlers与春天。模式,这两个文件就是XML Schema扩展的关键入口点。
& 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定义的标签的处理类、下面会对处理类进行详细说明。
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 nullSpring XML Schema扩展机制怎么用