分享自己的一篇学习笔记,共同进步。
首先我们要有一个实体类UserInfo进行参数接收
public class UserInfo {
private String id;
private String username;
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "UserInfo{" +
"username='" + username + '\'' +
", age='" + age + '\'' +
'}';
}
}
1、模仿一个继承了 AbstractSingleBeanDefinitionParser 的子类
写出自己的处理类
public class UserInfoBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
@Override
protected Class<?> getBeanClass(Element element) {
return UserInfo.class;
}
@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
String id =element.getAttribute("id");
String username =element.getAttribute("username");
String age = element.getAttribute("age");
if (StringUtils.hasText(id)) {
builder.addPropertyValue("id", id);
}
if (StringUtils.hasText(username)) {
builder.addPropertyValue("username", username);
}
if (StringUtils.hasText(age)) {
builder.addPropertyValue("age", age);
}
}
}
2、模仿一个继承了NamespaceHandlerSupport的子类
写出自己的处理类
public class UserInfoNamespaceHandler extends NamespaceHandlerSupport {
@Override
public void init() {
registerBeanDefinitionParser("user-info",new UserInfoBeanDefinitionParser());
}
}
3、指定标签值,在META-INF下定义以下三个文件
3.1、handlers用于绑定2中定义的UserNamespaceHandler
http\://www.hhynl.com/schema/userInfo=com.hhynl.custom.selftag.UserInfoNamespaceHandler
这个在使用的时候,用于定位文件,网址可以写自己的
3.2、schemas用于绑定xsd文件位置
http\://www.hhynl.com/schema/userInfo.xsd=META-INF/userInfo.xsd
3.3、xsd文件用于指定标签内容
注意:name="user-info" 要与2中的registerBeanDefinitionParser的传参名字相同;
需要有id属性。
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.hhynl.com/schema/userInfo"
elementFormDefault="qualified">
<element name="user-info">
<complexType>
<attribute name ="id" type = "string"/>
<attribute name ="username" type = "string"/>
<attribute name ="age" type = "string"/>
</complexType>
</element>
</schema>
4、使用
1、定位文件位置下图是以下文件间的关联部分