Spring Schema扩展机制
2020-12-13 03:53
标签:data port 方法 list lis ace single abstract led Spring2.0开始,Spring提供 XML Bean解析器,集成到Spring IOC容器中。 创建一个 自定义处理器类,并实现 自定义一个或者多个解析器,实现 注册上面的组建到Spring IOC容器。 (1): 自定义 (2):自定义 decorate():嵌套元素时候调用 Spring提供一个默认实现类 用到了 (3):自定义 解析相应的属性设置到Bean中)将会被调用。 Spring提供 getBeanClass():返回元素Class类型 doParse():添加元素属性或者构造参数 (4):注册handler和schema 把实现的NamespaceHandler和xsd文件配置到指定的配置文件中。位于 spring.handlers文件包含 遇到 spring.schemas文件包含 (5):测试 Spring Schema扩展机制 标签:data port 方法 list lis ace single abstract led 原文地址:https://www.cnblogs.com/liuenyuan1996/p/11093595.html1:概述
XML Schema
可扩展机制,用户可以自定义XML Schema文件,并自定义2:步骤:
XML Schema
文件,描述自定义的合法构建模块,也就是xsd文件。NamespaceHandler
接口。BeanDefinitionParser
接口(关键部分)。3:示例如下:
自定义XML Schema文件
xml version="1.0" encoding="UTF-8"?>
?
xsd:schema xmlns="http://www.liuenyuan.com/schema/myns"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:beans="http://www.springframework.org/schema/beans"
targetNamespace="http://www.liuenyuan.com/schema/myns"
elementFormDefault="qualified">
xsd:import namespace="http://www.springframework.org/schema/beans"/>
?
xsd:element name="dateFormat">
xsd:complexType>
xsd:complexContent>
xsd:extension base="beans:identifiedType">
xsd:attribute name="pattern" type="xsd:string" use="required"/>
xsd:extension>
xsd:complexContent>
xsd:complexType>
xsd:element>
xsd:schema>
targetNamespace
是http://www.liuenyuan.com/schema/myns
,xmlns
与命名空间必须一致。NamespaceHandler
NamespaceHandler
接口只有三个方法
init()
:在NamespaceHandler
被使用之前调用,完成初始化parse()
:解析元素NamespaceHandlerSupport
,注入每个元素的解析器即可。代理委托
概念。NamespaceHandlerSupport
可以注册任意个BeanDefinitionParser
,负责所有自定义元素编排,实际XML解析工作委托给各个BeanDefinitioParser
负责。BeanDefinitionParser
BeanDefinitionParser
将被调用,如果NamespapceHandler
遇到元素类型已经有对应注册的parser(例如上面的handler如果遇到dateformat,DateformatDefinitionParser
会被调用,BeanDefinitionParser
负责解析一个顶级元素。AbstractSingleBeanDefinitionParser
处理繁重的解析工作。
META-INF
目录中。
xml schema uri
和Handler
类映射关系。http\://www.liuenyuan.com/schema/myns= com.ley.springboot.schema.xml.MynsNamespaceHandler
http\://www.liuenyuan.com/schema/myns
命名空间的时候会交给MynsNamespaceHandler来处理,key部分必须和xsd文件中的targetNamespace
值保持一致
xml schema xsd
文件命名空间和文件路径
映射关系。http\://www.liuenyuan.com/schema/myns.xsd=META-INF/myns.xsd
NamespaceHandler
实现类public class MynsNamespaceHandler extends NamespaceHandlerSupport {
?
@Override
public void init() {
registerBeanDefinitionParser("dateFormat", new MynsBeanDefinitionParser());
}
}
BeaDefinitionParser
实现类import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.w3c.dom.Element;
?
import java.text.SimpleDateFormat;
?
public class MynsBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
?
@Override
protected Class> getBeanClass(Element element) {
return SimpleDateFormat.class;
}
?
@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
String pattern = element.getAttribute("pattern");
builder.addConstructorArgValue(pattern);
}
}
上一篇:.Net框架与框架类库-转
下一篇:PHP做负载均衡回话保持问题参考