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

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.xsd
spring.handlers文件:指定标签校验为本地实现类

http\://www.tianjunwei.com/schema/user=com.tianjunwei.tag.namespacehandler.UserNamespaceHandler
6、在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标签的解析处理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值