博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 自定义标签创建
阅读量:4223 次
发布时间:2019-05-26

本文共 2914 字,大约阅读时间需要 9 分钟。

Spring自定义标签配置大致需要以下步骤:

  • 创建一个需要扩展的组件;
  • 定义一个XSD文件描述组件内容;
  • 创建一个文件,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义;
  • 创建一个Handler文件,扩展自NameSpaceHandlerSupport,目的是将组件注册到Spring容器;
  • 编写Spring.handlers和Spring.schemas文件;

创建一个需要扩展的组件

package com.maowei.learning.customTag;public class Person {
private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("name:"); sb.append(this.name); sb.append(" age:"); sb.append(this.age); sb.append('\n'); return sb.toString(); }}

这跟一般的POJO相比并没有什么特别之处,仅用来接收配置信息。

定义一个XSD文件描述组件内容

创建一个文件,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义

package com.maowei.learning.customTag;import org.springframework.beans.factory.support.BeanDefinitionBuilder;import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;import org.springframework.util.StringUtils;import org.w3c.dom.Element;public class PersonBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
protected Class getBeanClass(Element element){ return Person.class; } protected void doParse(Element element, BeanDefinitionBuilder bean){ System.out.println("开始注册BeanDefinition信息"); String name = element.getAttribute("name"); String age = element.getAttribute("age"); if(StringUtils.hasText(name)) bean.addPropertyValue("name", name); if(StringUtils.hasText(age)) bean.addPropertyValue("age", Integer.valueOf(age)); }}

创建一个Handler文件,扩展自NameSpaceHandlerSupport,目的是将组件注册到Spring容器

package com.maowei.learning.customTag;import org.springframework.beans.factory.xml.NamespaceHandlerSupport;public class CustomNamespaceHandler extends NamespaceHandlerSupport {
public void init() { System.out.println("开始解析自定义命名空间"); registerBeanDefinitionParser("person", new PersonBeanDefinitionParser()); }}

编写Spring.schemas文件;

http\://www.maowei.com/schema/spring-person.xsd=META-INF/spring-person.xsd

编写Spring.handlers文件

http\://www.maowei.com/schema/person=com.maowei.learning.customTag.CustomNamespaceHandler

测试

配置文件

测试类

package com.maowei.learning.customTag;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TagTest {    public static void main(String[] args){        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/spring-tag.xml");        Person p = (Person)ctx.getBean("a00001");        System.out.println(p.toString());    }}

运行结果

这里写图片描述

你可能感兴趣的文章
UVM:7.7.2 使用UVM_PREDICT_DIRECT功能与mirror 操作
查看>>
UVM:7.7.3 寄存器模型的随机化与update
查看>>
UVM:7.7.4 扩展位宽
查看>>
UVM:7.8.1 get_root_blocks
查看>>
UVM:7.8.2 get_reg_by_offset 函数
查看>>
UVM:8.2.2 重载的方式及种类
查看>>
UVM:8.2.3 复杂的重载
查看>>
UVM:8.2.4 factory 机制的调试
查看>>
UVM:8.3.1 重载transaction
查看>>
UVM:8.3.2 重载sequence
查看>>
leetcode171.[math] Excel Sheet Column Number
查看>>
Log4j配置
查看>>
java发送https请求
查看>>
java发送https请求证书问题
查看>>
js新消息提醒
查看>>
js窗体消息提醒
查看>>
深入Hibernate映射文件(二)——<hibernate-mapping>的属性
查看>>
详解在Spring中进行集成测试
查看>>
Struts2中过滤器和拦截器的区别
查看>>
51单片机:led灯闪烁10次后熄灭
查看>>