您的位置:首页 > 编程语言 > Java开发

Spring源码学习--自定义标签

2017-05-17 11:14 344 查看
Spring对配置文件applicationContext.xml中的标签解析都是有一定规则的要求的,Spring作为一个开放的框架其也允许我们定制一些我们需要的标签元素。
1、创建解析结果实体类:
public class User {

private String name;
private String email;
private int age;
//get和set方法
}2、建立解析自定义标签的类 UserBeanDefinitionParser
public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {

protected Class getBeanClass(Element element) {
//解析结果生成User实体类
return User.class;
}

protected void doParse(Element element, BeanDefinitionBuilder bean) {
//从配置文件中获取值,并添加的User中
String userName = element.getAttribute("name");
String email = element.getAttribute("email");
int age = Integer.parseInt(element.getAttribute("age"));

if (StringUtils.hasText(userName)) {
bean.addPropertyValue("name", userName);
}
if (StringUtils.hasText(email)) {
bean.addPropertyValue("email", email);
}
bean.addPropertyValue("age", age);
}

}
3、建立处理的类 UserNamespaceHandler,这个类主要用来调用解释类
public class UserNamespaceHandler extends NamespaceHandlerSupport{

@Override
public void init() {
registerBeanDefinitionParser("user", new UserBeanDefinitionParser());
}

}4、建立spring-test.xsd 文件,用来校验我们的自定义标签的有效性
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.tianjunwei.com/schema/user"
xmlns:tns="http://www.tianjunwei.com/schema/user" elementFormDefault="qualified">
<element name="user">
<complexType>
<attribute name="id" type="string" />
<attribute name="age" type="int" />
<attribute name="name" type="string" />
<attribute name="email" type="string" />
</complexType>
</element>
</schema>
5、配置我们自己定义的schema和handlers文件
spring.schemas文件:指定链接访问本地文件地址
http\://www.tianjunwei.com/schema/user.xsd=META-INF/spring-test.xsdspring.handlers文件:指定标签校验为本地实现类
http\://www.tianjunwei.com/schema/user=com.tianjunwei.tag.namespacehandler.UserNamespaceHandler6、在spring的xml文件中添加标签解析处理链接,并注入bean

7、运行spring获取bean结果并打印
public class TagMain {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("tag.xml");
User user = (User) ac.getBean("testBean");
System.out.println(user.getName());
}

}打印结果:cong

总结:通过按照spring实现的规则,我们就可以自定义一些xml标签的解析处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: