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 文件,用来校验我们的自定义标签的有效性
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标签的解析处理。
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标签的解析处理。
相关文章推荐
- Dubbo 源码学习(三)spring 自定义标签
- spring学习笔记:Spring IOC容器,Spring源码
- spring学习笔记之AbstractController源码解读
- 【Spring】IOC核心源码学习(二):容器初始化过程
- spring 源码学习 初始化(一)
- 学习spring源码
- 学习Spring 附带源码jpetstore 一 安装配置篇
- spring源码学习笔记-初始化(4)
- spring源码学习笔记-初始化(六)-完成及异常处理
- spring源码学习笔记-初始化(五)-MessageSource/事件监听器
- spring源码学习笔记-初始化(二) PostProcessor
- spring学习笔记之handler mapping源码解读
- Spring源码学习(一)------ IoC
- Spring源码学习(二)------ AOP
- Spring IOC核心源码学习
- spring学习笔记之DispatcherServlet源码解读
- Spring源码学习(二)------ AOP
- Spring源码学习(二)------ AOP
- Spring源码学习-容器初始化之FileSystemXmlApplicationContext(二)路径格式及解析方式(上) 推荐
- spring源码学习笔记-初始化(三) registerBeanPostProcessors