spring源码研究2 自定义标签实现及使用

1.自定义标签实现及使用
参考: http://blog.csdn.net/fighterandknight/article/details/50112701

1)创建一个需要扩展的组件 User.java

2)定义一个XSD文件,描述组件内容 user.xsd

3)创建一个java类 MyParser.java ,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义

4)创建一个Handler类 MyNamespaceHandler.java ,扩展子NameSpaceHandlerSupport,目的是将组件注册到容器。

5)编写(添加)Spring.handlers和Spring.schemas文件。

类图如下:

 

jvm敏捷开发语言groovy 主要依赖接口 NamespaceHandlerResolver,NamespaceHandler 实现自定义标签的解析与处理。

NamespaceHandlerResolver 存在实现,可以不必管, NamespaceHandler 存在抽象实现 NamespaceHandlerSupport ,其中又依赖接口 BeanDefinitionParser,我们主要是对抽象实现AbstractSimpleBeanDefinitionParser中的doParse(),getBeanClass()进行处理。

1)创建一个需要扩展的组件 User.java

package com.base.yun.spring.beans;

public class User {

    private String name;  
    private String sex;  
    private String email;  
    private String id;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }  
    
    
}

2)定义一个XSD文件,描述组件内容 user.xsd

<?xml version="1.0" encoding="UTF-8"?>  
<schema xmlns="http://www.w3.org/2001/XMLSchema"  
            targetNamespace="http://www.yun.com/schema/user"  
            xmlns:tns="http://www.yun.com/schema/user"  
            elementFormDefault="qualified">  
  
  
<element name="user">  
    <complexType>  
        <attribute name="id" type="string" />  
        <attribute name="name" type="string" />  
        <attribute name="sex" type="string" />  
        <attribute name="email" type="string" />  
    </complexType>  
</element>  
  
</schema>  

3)创建一个java类 MyParser.java ,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义

package com.base.yun.spring.parser;

import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
import org.w3c.dom.Element;

import com.base.yun.spring.beans.User;

public class MyParser extends AbstractSimpleBeanDefinitionParser{

    @Override
    protected Class<?> getBeanClass(Element element) {
        return User.class;
    }

}

4)创建一个Handler类 MyNamespaceHandler.java ,扩展子NameSpaceHandlerSupport,目的是将组件注册到容器。

package com.base.yun.spring.namespacehandler;

import org.springframework.beans.factory.xml.NamespaceHandlerSupport;

import com.base.yun.spring.parser.MyParser;


public class MyNamespaceHandler extends NamespaceHandlerSupport{

    public void init() {
        registerBeanDefinitionParser("user", new MyParser());
    }
}

5)编写(添加)Spring.handlers和Spring.schemas文件。

http://www.yun.com/schema/user=com.base.yun.spring.namespacehandler.MyNamespaceHandler
http://www.yun.com/schema/user.xsd=org/springframework/beans/factory/xml/user.xsd

代码目录如下:

原文地址:https://www.cnblogs.com/yun965861480/p/7574098.html