`
yxwang0615
  • 浏览: 559083 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

spring2.0(三) 自定义属性编辑器

阅读更多

 在Spring中,对象的普通属性(如int,String,List,Array,Set,Map等)可以通过配置文件注入到IoC Container,但是一些类型的属性(如Date等)必须通过某种转换器才可以注入到IoC容器并在程序中读取出正确的数据类型。Spring提供了 一种属性编辑器,可以将字符串(在配置文件中的都是字符串)转化为相应的对象,然后注入到其他对象中。

 

 什么是自定义属性编辑器?

Spring已经有内置的属性编辑器,我们可以根据需求自己定义属性编辑器,自定义属性编辑器的作用是把Spring配置文件中的字符串转换成相应的对象进行注入。

 

自定义属性编辑器的实现思路:

1. 写一个工具类继承PropertyEditorSupport,重写setAsText(String text)方法。

2. org.springframework.beans.factory.config.CustomEditorConfigurer类中,提供了存放用户自定义编辑器的缓存private Map customEditorCache。所以,把这个类注入到IoC中,再使用private Map customEditorCache的setter方法把用户自定义的工具类注入到Map customEditors属性中(一般属性注入),就可以实现自定义属性编辑器。

下面以一个java.util.Date类型的自定义属性转换器来演示说明:

package com.wyx.spring;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Bean {
	private String strValue;
	private int intValue;
	private List listValue;
	private Set setValue;
	private String[] arrayValue;
	private Map mapValue;
	private Date dateValue;//日期类型的转换不使用自定义属性编辑器,就会报错
	
		
	getter and setter...	
	
}

 

applicationContext-beans.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:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
	
	<bean id="myBean" class="com.wyx.spring.Bean">
		<property name="strValue" value="hello" />
		<property name="intValue" value="123"/>
		<property name="listValue">
			<list>
				<value>list1</value>
				<value>list2</value>
			</list>
		</property>
		<property name="setValue">
			<set>
				<value>set1</value>
				<value>set2</value>
			</set>
		</property>
		<property name="arrayValue">
			<list>
				<value>array1</value>
				<value>array2</value>
			</list>
		</property>
		<property name="mapValue">
			<map>
				<entry key="k1" value="v1"/>
				<entry key="k2" value="v2"/>
			</map>
		</property>
		<property name="dateValue">
			<value>2008-1-1</value>
		</property>
		
	</bean>
</beans>

  applicationContext-editor.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:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
	<!-- 定义属性编辑器 -->
	<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<!-- setter注入,把一个自定义工具类注入给spring提供给我们的用户编辑器配置类CustomEditorConfigurer的customEditors(自定义编辑器的缓存)属性中-->
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
				<!-- 内部bean定义方式 可以省略id 只有包含它的customEditors可以使用 -->
					<bean class="com.wyx.spring.utils.UtilDatePropertyEditor">
						<!-- setter方式注入,将format的格式注入给工具类的format属性,这样可以灵活的修改输入格式 -->
						<property name="format" value="yyyy-MM-dd"/>
					</bean>
				</entry>
			</map>
		</property>
	</bean>
</beans>

 

用一个junit测试类来测试我们自定义的属性编辑器是否生效:

package com.wyx.spring;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import junit.framework.TestCase;

public class BeanTest extends TestCase {
	private BeanFactory bf = null;
	@Override
	protected void setUp() throws Exception {
		//初始化操作
		//通配符,把全部applicationContext-开头的文件加载进来
		bf = new  ClassPathXmlApplicationContext("applicationContext-*.xml");
	}
	public void testBean(){
		Bean mybean = (Bean)bf.getBean("myBean");
		System.out.println("mybean.strValue = " + mybean.getStrValue());
		System.out.println("mybean.intValue = " + mybean.getIntValue());
		System.out.println("mybean.setValue = " + mybean.getSetValue());
		System.out.println("mybean.arrayValue = " + mybean.getArrayValue());
		System.out.println("mybean.mapValue = " + mybean.getMapValue());
		System.out.println("mybean.dataValue = " + mybean.getDateValue());
	}
}

 打印:

mybean.strValue = hello
mybean.intValue = 123
mybean.setValue = [set1, set2, set3]
mybean.arrayValue = [Ljava.lang.String;@21b220
mybean.mapValue = {k1=v1, k2=v2}
mybean.dataValue = Tue Jan 01 00:00:00 CST 2008

 

 要想修改接收字符串型日期类型的格式,只需要修改 applicationContext-editor.xml中format的value即可。

分享到:
评论

相关推荐

    spring2.0-reference_final_zh_cn

    6. **容器增强**:Spring 2.0的容器支持更多的元数据,如自定义属性编辑器、自动装配改进、基于注解的配置等,使配置更为灵活。 7. **Java配置**:除了XML配置,Spring 2.0开始支持Java配置,通过@Configuration和@...

    Spring2.0学习笔记

    自定义编辑器需继承`PropertyEditorSupport`,覆盖`setAsText()`方法,并在Spring配置中注册。 3. **依赖对象的注入** - **ref属性与标签**:这两种方式用于指定依赖对象的引用,比如`...

    struts2.0+spring2.0+hibernate3.1+web应用

    【Struts2.0+Spring2.0+Hibernate3.1+Web应用】是一个经典的Java企业级应用架构组合,主要用于构建高效、灵活且易于维护的Web应用程序。这个组合集成了Struts2作为MVC框架,Spring作为依赖注入(DI)和面向切面编程...

    Spring 2.0 开发参考手册

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    struts2.0+spring2.0+hibernate3.1

    Struts2.0、Spring2.0和Hibernate3.1是经典的Java企业级开发框架组合,通常被称为SSH(Struts2、Spring、Hibernate)架构。这个仓库管理系统是基于SSH搭建的,展示了如何在实际项目中整合这三个框架进行数据管理。 ...

    尚学堂Spring学习笔记

    三、自定义属性编辑器 Spring默认不能注入Date类型的值,但是我们可以通过自定义属性编辑器来实现这一功能。步骤如下: 1. 定义一个属性编辑器的类,这个类要继承Spring中的spring.beans.PropertyEditorSupport类...

    Myeclipse 2017 stable 2.0套餐

    2. **自定义配置**:Myeclipse 2017 Stable 2.0提供了丰富的个性化设置选项,用户可以根据自己的需求调整编辑器、字体、颜色等,打造专属的工作环境。 3. **文档和帮助**:丰富的在线文档和教程资源,帮助新用户...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的...

    Activiti5.20.0整合spring4.15示例,整合流程编辑器modeler

    本示例是关于如何将 Activiti 5.20.0 版本与 Spring 4.15 框架进行集成,并结合流程编辑器 Modeler 的实践教程。 首先,Spring 是一个广泛应用的Java企业级应用框架,它提供了依赖注入、AOP(面向切面编程)以及...

    spring chm文档

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    Spring in Action(第二版 中文高清版).part2

    3.4 注册自定义属性编辑器 3.5 使用Spring的特殊Bean 3.5.1 后处理Bean 3.5.2 Bean工厂的后处理 3.5.3 配置属性的外在化 3.5.4 提取文本消息 3.5.5 程序事件的解耦 3.5.6 让Bean了解容器 3.6 脚本化的Bean ...

    springsecurity中文

    使用一个良好的 XML 编辑器来编辑应用环境文件,应该提供可用的属性和元素信息。我们推荐你尝试一下 SpringSource 工具套件,因为它具有处理 Spring 组合命名空间的特殊功能。 要开始在你的应用环境里使用 security...

    APPFUSE2.0中加入FCKeditor

    在集成FCKeditor时,理解这个文件的作用对于调试和自定义编辑器功能至关重要。 **详细知识点:** 1. **APPFuse 2.0**:APPFuse是一个基于Maven的开源项目,它提供了多种Java Web应用框架的起点,如Struts、Spring ...

    spring.net中文手册在线版

    4.3.3.详细讨论对象属性和构造器参数 4.3.3.1.设置空值 4.3.3.2.设置集合值 4.3.3.3.设置泛型集合的值 4.3.3.4.设置索引器属性 4.3.3.5.内联对象定义 4.3.3.6.idref节点 4.3.3.7.引用协作对象 4.3.3.8.value和ref...

    Spring in Action(第2版)中文版

    3.4注册自定义属性编辑器 3.5使用spring的特殊bean 3.5.1后处理bean 3.5.2bean工厂的后处理 3.5.3配置属性的外在化 3.5.4提取文本消息 3.5.5程序事件的解耦 3.5.6让bean了解容器 3.6脚本化的bean 3.6.1给...

    Spring in Action(第二版 中文高清版).part1

    3.4 注册自定义属性编辑器 3.5 使用Spring的特殊Bean 3.5.1 后处理Bean 3.5.2 Bean工厂的后处理 3.5.3 配置属性的外在化 3.5.4 提取文本消息 3.5.5 程序事件的解耦 3.5.6 让Bean了解容器 3.6 脚本化的Bean ...

    Spring API

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    ext2.0网格实践源码

    6. **自定义行为**:EXT GridPanel允许开发者自定义很多行为,例如,自定义编辑器、行样式或者添加按钮等。这部分源码可能会展示如何扩展GridPanel以实现特定功能。 7. **Eclipse工程**:作为Eclipse工程,这可能是...

    Spring-activiti-ruoyi-activiti

    此外,为了调试和测试,你可以利用Activiti的工作流设计器(Activiti Modeler)进行流程模型的可视化编辑,然后导出XML文件用于部署。同时,Activiti的监控和历史查询功能可以帮助你追踪流程执行情况,进行问题排查...

Global site tag (gtag.js) - Google Analytics