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

Posted 莫大人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

代码目录如下:

 

以上是关于spring源码研究2 自定义标签实现及使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring源码学习自定义标签的解析

Spring 源码分析--自定义标签的使用

Spring源码解析——自定义标签解析

Spring源码分析bean标签的解析及注册

6.2 dubbo在spring中自定义xml标签源码解析

spring源码-自定义标签-4