`

spring中自定义属性编辑器CustomEditorConfigurer

阅读更多
什么是属性编辑器,作用?
* 自定义属性编辑器,spring配置文件中的字符串转换成相应的对象进行注入
spring已经有内置的属性编辑器,我们可以根据需求自己定义属性编辑器

* 如何定义属性编辑器?
* 继承PropertyEditorSupport类,覆写setAsText()方法,参见:UtilDatePropertyEditor.java
* 将属性编辑器注册到spring中,参见:applicationContext.xml

比如:
有一个类里面有一个Date属性
public class Bean1 {
     private Date dateValue;
     public void setDateValue(Date dateValue) {
		this.dateValue = dateValue;
	}
}

applicationContext.xml配置文件如下:
<!--将bean1中的Date赋值2008-08-15,spring会认为2008-08-15是String,无法转换成Date,会报错!-->
<bean id="bean1" class="com.bjsxt.spring.Bean1">
      <property name="dateValue">
		 <value>2008-08-15</value>
	</property>
</bean>
<!-- 于是定义属性编辑器 -->      
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
	<property name="customEditors">
		<map>
			<entry key="java.util.Date">
				<bean class="com.bjsxt.spring.UtilDatePropertyEditor">
                                        <!--干脆把format也注入,灵活处理格式-->
					<property name="format" value="yyyy-MM-dd"/>
				</bean>
			</entry>
		</map>
	</property>
</bean>	

UtilDatePropertyEditor.java 如下,必须继承java.beans.PropertyEditorSupport类,覆写setAsText()方法
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * java.util.Date属性编辑器 
 * @author Administrator
 *
 */
public class UtilDatePropertyEditor extends PropertyEditorSupport {

	private String format="yyyy-MM-dd";
	
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		System.out.println("UtilDatePropertyEditor.saveAsText() -- text=" + text);
		
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			Date d = sdf.parse(text);
			this.setValue(d);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	public void setFormat(String format) {
		this.format = format;
	}

}


这样就可以完成正确解析了,注意customEditors是Spring的类CustomEditorConfigurer提供的属性,是一个Map,里面存放的都是自定义的编辑器(customEditors),比如这里存放的是UtilDatePropertyEditor日期编辑器,看CustomEditorConfigurer源码就知道了。

测试一下:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import junit.framework.TestCase;

public class InjectionTest extends TestCase {
	
	private BeanFactory factory;
	
	@Override
	protected void setUp() throws Exception {
		factory = new ClassPathXmlApplicationContext("applicationContext.xml");	
	}

	public void testInjection1() {
		Bean1 bean1 = (Bean1)factory.getBean("bean1");
		System.out.println("bean1.dateValue=" + bean1.getDateValue());
	}
	
}

能打印出日期就OK了。
分享到:
评论
1 楼 javatozhang 2014-04-23  
很清晰、谢谢你的分析!

相关推荐

    Spring个人学习笔记.pdf

    10. 自定义编辑器配置器(CustomEditorConfigurer) 文档中出现了“CustomEditorConfigurer”,这是Spring提供的一个用于注册自定义属性编辑器的Bean。它允许我们在应用上下文中注册编辑器类,用于字符串和Java对象...

    Spring环境搭建

    在配置文件中注册自定义属性编辑器,可以使用`&lt;bean&gt;`标签定义一个`CustomEditorConfigurer`,然后通过`&lt;property&gt;`标签的`customEditors`属性设置属性编辑器映射。 依赖对象的注入方式有很多种,包括: - 使用`ref...

    Spring中属性注入详解

    为了让Spring能够使用这个自定义编辑器,我们需要在配置文件中注册它: ```xml &lt;bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"&gt; ``` 这样,当我们通过`...

    自己总结的Spring实用资料

    然后通过`CustomEditorConfigurer`在Spring配置文件中注册这个自定义编辑器。 4. **属性注入的几种方式**: - 使用`ref`属性:直接在`&lt;property&gt;`标签中通过`ref`属性引用另一个bean,如`...

    spring数据格式转换

    总的来说,Spring的数据格式转换机制提供了极大的灵活性,让我们能够轻松地处理各种数据类型之间的转换,同时支持自定义编辑器以满足特定业务需求。通过注册自定义的`PropertyEditor`,我们可以确保HTTP请求参数被...

    Spring学习笔记

    这里我们定义了一个名为`customEditorConfigurer`的bean,它注册了一个针对`java.util.Date`类型的自定义编辑器。通过`CustomDateEditor`,我们指定了日期的格式为`yyyy-MM-dd`,并且不允许用户输入的时间为空。 ##...

    spring学习笔记2

    - `CustomEditorConfigurer`:允许注册自定义编辑器,用于将字符串转换为特定类型的数据。 3. **事件处理**:Spring框架提供了事件发布和监听机制,可以处理各种应用级别的事件。这包括: - 定义事件类继承自`...

    通过Setters方式对日期属性及日期格式进行IOC注入

    为了实现这一点,我们可以利用Spring的属性编辑器(Property Editor)机制,这类似于Struts框架中的转换器(Converter)功能。 首先,我们需要创建一个自定义的属性编辑器类,例如`PropertyEditor`。这个类需要继承...

    Acegi 数据库配置安全策略 源代码及图解

    6. **定制编辑器配置**:`customEditorConfigurer.jpg`可能涉及到Acegi中自定义类型转换器的配置,这对于处理自定义权限对象或其他特殊类型的认证信息很有帮助。 7. **用户权限管理**:标签中的“用户权限”表明,...

    Spring注入Date类型的三种方法总结

    接着创建一个`CustomEditorConfigurer` Bean,将`dateEditor` Bean注册为`java.util.Date`类型的自定义编辑器。这样,当Spring遇到`Date`类型的属性时,会自动使用`dateEditor`进行转换。在`datebean` Bean中,直接...

Global site tag (gtag.js) - Google Analytics