博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring 自定义标签实现传递list属性
阅读量:6442 次
发布时间:2019-06-23

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

  hot3.png

本例的全部源代码:

 

1. 定义XSD文件:

2. 设置:spring.handlers

http\://www.37link.com/schema/scf=com.mm.spring_ext.MyNamespaceHandler

3. 设置:spring.schemas

http\://www.37link.com/schema/scf/scf.xsd=com/mm/spring_ext/scf.xsd

4. 定义spring对自定义的命名空间进行解析的操作

package com.mm.spring_ext;import java.util.ArrayList;import java.util.List;import org.springframework.beans.factory.support.BeanDefinitionBuilder;import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;import org.springframework.util.StringUtils;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class PeopleBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {	protected Class getBeanClass(Element element) {		return People.class;	}	protected void doParse(Element element, BeanDefinitionBuilder bean) {		String name = element.getAttribute("name");		String age = element.getAttribute("age");		String id = element.getAttribute("id");		NodeList elementSons = element.getChildNodes();		if (StringUtils.hasText(id)) {			bean.addPropertyValue("id", id);		}		if (StringUtils.hasText(name)) {			bean.addPropertyValue("name", name);		}		if (StringUtils.hasText(age)) {			bean.addPropertyValue("age", Integer.valueOf(age));		}		if (elementSons != null && elementSons.getLength() > 0) {			List
list = new ArrayList
(); for (int i = 0; i < elementSons.getLength(); i++) { Node node = elementSons.item(i); if (node instanceof Element) { if ("own".equals(node.getNodeName()) || "own".equals(node.getLocalName())) { String value = ((Element) node).getAttribute("value"); list.add(value); } } } bean.addPropertyValue("own", list); } }}

5.将解析类注册到命名空间中的实现

package com.mm.spring_ext;import org.springframework.beans.factory.xml.NamespaceHandlerSupport;public class MyNamespaceHandler extends NamespaceHandlerSupport {	public void init() {		registerBeanDefinitionParser("student", new PeopleBeanDefinitionParser());	}}

 6.定义需要spring管理bean的实体 People.java

package com.mm.spring_ext;import java.util.List;public class People {	private String id;	private String name;	private Integer age;	private List
own; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public List
getOwn() { return own; } public void setOwn(List
own) { this.own = own; }}

7. 然后配置spring的xml配置文件test.xml

 

8. 最后写一个测试类,简单起见,直接用main函数的方式

package com.mm.spring_ext_test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.mm.spring_ext.People;public class AppTest {	public static void main(String[] args) {		ApplicationContext ctx = new ClassPathXmlApplicationContext("test.xml");		People f = (People) ctx.getBean("scf1");		if (f != null && f.getOwn() != null && f.getOwn().size() > 0) {			for (String own : f.getOwn()) {				System.out.println(own);			}		}	}}

本例的全部源代码:https://git.oschina.net/mn_1127/spring-ext.git

转载于:https://my.oschina.net/mn1127/blog/678490

你可能感兴趣的文章
ubuntu 12.04 rails server 时候报错 execjs
查看>>
linux下文件压缩与解压操作
查看>>
使用树莓派实现微信远程监控
查看>>
在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题
查看>>
linux sed命令
查看>>
浅谈当下网页设计趋势
查看>>
TCP 滑动窗口和 拥塞窗口
查看>>
VS2008调试程序时出现"XXX mutex not created."
查看>>
解决Java连接MySQL存储过程返回参数值为乱码问题
查看>>
c++ 字符检测 TCharacter
查看>>
MalformedObjectNameException: Invalid character '' in value part of property
查看>>
Hadoop格式化HDFS报错java.net.UnknownHostException: localhost.localdomain: localhost.localdomain
查看>>
android 40 Io编程
查看>>
STL之Vector(不定长数组)
查看>>
Ext江湖
查看>>
一起谈.NET技术,实战ASP.NET大规模网站架构:Web加速器
查看>>
RHEL 6.6下Python 2.6.6升级到Python 3.6.6
查看>>
linux 内核启动过程以及挂载android 根文件系统的过程 ( 转)
查看>>
shell每日更新(7)
查看>>
单词的个数
查看>>