美文网首页spring 相关
Spring--自定义标签实例

Spring--自定义标签实例

作者: aix91 | 来源:发表于2019-04-24 08:46 被阅读0次

1. 在resource目录下创建META-INF

在META-INF目录下创建spring.hanlders: 指定NamespaceHandler;spring.schemas: 指定xsd模版文件. Spring 在初始化的时候,会自动到META-INF文件下扫描spring.handlers 和 spring.schemas文件

  • spring.handlers (前面的key随意指定)
http\://www.test.com/schema/apple=com.webgroup.test.handlers.MyNameSpaceHandler

-spring.schemas(指定xsd文件路径)

http\://www.test.com/schema/apple.xsd=/custome-apple.xsd

2. 创建xsd文件

xmlns, targetNameSpace 指定的是在spring.handlers 中自定义的key

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.test.com/schema/apple"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.test.com/schema/apple">
    <xsd:complexType name="apple">
        <xsd:attribute name ="id" type="xsd:string"></xsd:attribute>
        <xsd:attribute name="name" type="xsd:string"> </xsd:attribute>
    </xsd:complexType>
    <xsd:element name="apple" type="apple"></xsd:element>
</xsd:schema>

3. 创建NameSpaceHandler

public class MyNameSpaceHandler extends NamespaceHandlerSupport {
    @Override
    public void init() {
        registerBeanDefinitionParser("apple", new AppleBeanDefinitionParser());
    }
}

NameSpaceHander管理着complexType 和 BeanDefinitionParser的一一对应关系。上文中指定的"apple" 要和xsd文件中定义的complexType名保持一致。

4. 创建BeanDefinitionParser

public class AppleBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
    @Override
    protected Class<?> getBeanClass(Element element) {
        return Apple.class;
    }
    @Override
    protected void doParse(Element element, BeanDefinitionBuilder builder) {
        String id = element.getAttribute("id");
        String name = element.getAttribute("name");
        if (StringUtils.isNotEmpty(id)) {
            builder.addPropertyValue("id", id);
        }
        if (StringUtils.isNotEmpty(name)) {
            builder.addPropertyValue("name", name);
        }
    }
}

BeanDefinitionParser将属性值从文件里读出来,并写在BeanDefinitionBuilder中。

5. 测试xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mytest="http://www.test.com/schema/apple"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.test.com/schema/apple http://www.test.com/schema/apple.xsd">
    <mytest:apple id="1234" name="nameTest"/>
</beans>

xsi:schemaLocation 指定的是spring官方、自定义的nameSpaceHandler和xds文件的路径;

6.测试类

@Controller
public class TestController {
    @Autowired
    private Apple apple;

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public String test() {
        return  apple.getName();
    }
}

相关文章

  • Spring--自定义标签实例

    1. 在resource目录下创建META-INF 在META-INF目录下创建spring.hanlders: ...

  • vue自定义标签(directives)

    全局自定义标签的使用(任何一个实例化标签都可以使用)Vue.directives("focus",bind:fun...

  • Spring4 自定义标签解析源码

    介绍 Spring将标签解析分为自定义标签解析和默认标签解析。 自定义标签解析开始位置 BeanDefinitio...

  • Spring自定义标签的定义和解析

    一、自定义标签的定义 1. 什么是自定义的标签? 1.1 自定义标签配置 该案例是基于Jedis创建了一个自定义标...

  • 14.自定义标签库开发(我的JavaEE笔记)

    一、 自定义标签简介 自定义标签主要用于移除jsp页面中的java代码。工程(tag) 使用自定义标签移除jsp页...

  • html实现一个简单列表

    目标效果 知识点 html标签之 标签定义有序列表 实例: 显示效果: html标签之 标签定义无序列表 实例...

  • FreeMarker自定义标签

    freemarker 自定义标签 有两种方法,一种是Spring注解添加自定义标签 一种的编码添加自定义标签 第...

  • JavaWeb之Tag File

    Tag File: 用于简化自定义标签,使用Tag File可以无须定义标签处理类和标签库文件 自定义标签的使用与...

  • 多分类、多标签

    多分类:一个实例只有一个类别标签多标签:一个实例可能有多个类别标签

  • 10-ref|refs

    总结ref与refs的用法有几点:ref可以绑定同在一个实例上的任何自定义组件和标签。均可以通过$refs.xx ...

网友评论

    本文标题:Spring--自定义标签实例

    本文链接:https://www.haomeiwen.com/subject/sqfwgqtx.html