• 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

    代码目录如下:

  • 相关阅读:
    母版中menu控件上传后出现脚本错误
    asp.net中修改网页的编码方式
    DataBinder的应用
    web服务器控件MultiView 应用
    asp:Wizard 应用
    web服务器控件PlaceHolder应用
    Gridivew里的Textbox值取不出来?
    登录控件Login的应用
    NHibernate调用存储过程
    FckEditor网页编辑器的使用总结
  • 原文地址:https://www.cnblogs.com/yun965861480/p/7574098.html
Copyright © 2020-2023  润新知