1 设置html文件的语法格式xsd文件
根据POJO的属性编写xsd文件。
例如
targetNamespace="http://www.zhangyh.com/schema/user"
elementFormDefault="qualified">
对应的POJO是
public class User {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
属性的getter和setter方法不可缺少
可以使得User的属性在xml中可以配置,如
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mytest="http://www.zhangyh.com/schema/user"
xsi:schemaLocation="http://www.springframework.org/schema/beans
classpath:com.zhangyh.xsd/schema/spring-beans-2.0.xsd
http://www.zhangyh.com/schema/user
http://www.zhangyh.com/schema/user.xsd">
mytest:是自定义的命名空间名 classpath:是本地xsd文件加载协议
2 实现BeanDefinitionParser接口和扩展类NamespaceHandlerSupport
扩展NamespaceHandlerSupport类:实现XML中的数据的手动加载到BeanDefinitionBuilder中
public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
protected Class getBeanClass(Element element){
return User.class;
}
protected void doParse(Element element, BeanDefinitionBuilder bean) {
String userName = element.getAttribute("name");
String email = element.getAttribute("email");
if(StringUtils.hasText(userName)) {
bean.addPropertyValue("name", userName);
}
if (StringUtils.hasText(email)) {
bean.addPropertyValue("email", email);
}
}
}
实现BeanDefinitionParser接口:手动注册POJO的手动解析结果
public class MyNamespaceHandler extends NamespaceHandlerSupport {
public void init() {
registerBeanDefinitionParser("user",new UserBeanDefinitionParser());
}
}
3 设置Spring.handlers和Spring.schemas文件
配置META-INF/Spring.handlers:
http\://www.zhangyh.com/schema/user=com.zhangyh.xsd.paser.MyNamespaceHandler
配置META-INF/Spring.schemas
http\://www.zhangyh.com/schema/user.xsd=com.zhangyh.xsd/schema/user.xsd
载入自定义xsd文件
通过ClassPathXmlApplicationContext访问自定义xsd配置的XML文件
本文由博客一文多发平台 OpenWrite 发布!