spring类解析
【1】自定义标签解析
与自定义标签解析相关的类:
- org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser
- org.springframework.beans.factory.xml.NamespaceHandlerSupport
xsd文件
xsd文件 xml schema的用途
- 定义一个xml文档中都有什么元素
- 定义一个xml文档中都会有什么属性
- 定义某个节点都有什么样的子节点,可以有多少个子节点,子节点的出现顺序
- 定义元素或者属性的数据类型
- 定义元素或者属性的默认值或者固定值 xml schema的根元素:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema". 表示数据类型等定义来自w3
targetNamespace="http://www.w3schools.com" 表示文档中要定义的元素来自什么命名空间
xmlns="http://www.w3schools.com" 表示此文档的默认命名空间是什么
elementFormDefault="qualified"表示 要求xml文档的每个元素都要有命名空间指定/>
定义主体部分
</xs:schema>
定义简单元素:
<xs:element 此处表示要定义一个元素
name:"color" 表示要定义元素的名称
type:"xs:string" 表示要定义元素的数据类型
default:"red" 表示定义元素的默认值
fixed="red"/>. 表示要定义元素的默认值,此元素只可以取“red"值
以上定义了一个简单元素,元素实例<color>red</color>
定义一个属性
<xs:attribute
name="birthday" 表示要定义属性的名字
type="xs:date" 表示要定义属性的数据类型
default="2001-01-11" 表示要定义属性的默认值
fixed="2001-01-11" 表示要定义属性的固定值
use="required" /> 表示此属性是否是必须指定的,即如果不指定就不符合Schema,默认没有use="required"属性表示属性可有可无
定义元素或者属性值的限制 1、最大值最小值限制
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/> 大于等于0,<xs: minExclusive>表示最小值但是不包括指定值
<xs:maxInclusive value="120"/> 小于等于120,<xs: maxExclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
2、枚举限制,指只能在指定的几个值中取值
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
3.模式(pattern)限制 ,指字符串的格式必须满足制定的匹配模式 4.字符串长度的限制 5. 对于空白字符的限制 如何定义复杂类型. 【参考文档】
使用指示器 关键词
+[1]定义实例类bean,需要注入属性值得对象类
public class UserXtd {
private String userName;
private String emailAddress;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
}
定义解析xml配置文件,往对象注入属性类 UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser
public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
@Override
protected Class<?> getBeanClass(Element element) {
return UserXtd.class;
}
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
String name = element.getAttribute("userName");
String address = element.getAttribute("emailAddress");
if (StringUtils.hasText(name)) {
builder.addPropertyValue("userName",name);
}
if (StringUtils.hasText(address)) {
builder.addPropertyValue("emailAddress",address);
}
}
}
UserNamespaceHandler extends NamespaceHandlerSupport
public class UserNamespaceHandler extends NamespaceHandlerSupport {
@Override
public void init() {
registerBeanDefinitionParser("myUser", new UserBeanDefinitionParser());
}
}
创建实体类与xml配置文件关联的文件 resources/META-INF/spring.handlers
http\://www.goldstine.com/schema/user=org.example.parsexml.UserNamespaceHandler
resources/META-INF/spring.schemas
http\://www.goldstine.com/schema/user.xsd=META-INF/xmlparse.xsd
定义配置文件的配置。schema文件 xsd。 resources/META-INF/xmlparse.xsd
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.goldstine.com/schema/user"
elementFormDefault="qualified">
<element name="myUser">
<complexType>
<attribute name="id" type="string"/>
<attribute name="userName" type="string"/>
<attribute name="emailAddress" type="string"/>
</complexType>
</element>
</schema>
定义配置文件。 XTD-xml.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:myname="http://www.goldstine.com/schema/user"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.goldstine.com/schema/user http://www.goldstine.com/schema/user.xsd
">
<myname:myUser id="testUserBean" userName="huifer" emailAddress="huifer97@163.com"/>
</beans>