什么是属性编辑器,作用?
* 自定义属性编辑器,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了。
分享到:
相关推荐
10. 自定义编辑器配置器(CustomEditorConfigurer) 文档中出现了“CustomEditorConfigurer”,这是Spring提供的一个用于注册自定义属性编辑器的Bean。它允许我们在应用上下文中注册编辑器类,用于字符串和Java对象...
在配置文件中注册自定义属性编辑器,可以使用`<bean>`标签定义一个`CustomEditorConfigurer`,然后通过`<property>`标签的`customEditors`属性设置属性编辑器映射。 依赖对象的注入方式有很多种,包括: - 使用`ref...
为了让Spring能够使用这个自定义编辑器,我们需要在配置文件中注册它: ```xml <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> ``` 这样,当我们通过`...
然后通过`CustomEditorConfigurer`在Spring配置文件中注册这个自定义编辑器。 4. **属性注入的几种方式**: - 使用`ref`属性:直接在`<property>`标签中通过`ref`属性引用另一个bean,如`...
总的来说,Spring的数据格式转换机制提供了极大的灵活性,让我们能够轻松地处理各种数据类型之间的转换,同时支持自定义编辑器以满足特定业务需求。通过注册自定义的`PropertyEditor`,我们可以确保HTTP请求参数被...
这里我们定义了一个名为`customEditorConfigurer`的bean,它注册了一个针对`java.util.Date`类型的自定义编辑器。通过`CustomDateEditor`,我们指定了日期的格式为`yyyy-MM-dd`,并且不允许用户输入的时间为空。 ##...
- `CustomEditorConfigurer`:允许注册自定义编辑器,用于将字符串转换为特定类型的数据。 3. **事件处理**:Spring框架提供了事件发布和监听机制,可以处理各种应用级别的事件。这包括: - 定义事件类继承自`...
为了实现这一点,我们可以利用Spring的属性编辑器(Property Editor)机制,这类似于Struts框架中的转换器(Converter)功能。 首先,我们需要创建一个自定义的属性编辑器类,例如`PropertyEditor`。这个类需要继承...
6. **定制编辑器配置**:`customEditorConfigurer.jpg`可能涉及到Acegi中自定义类型转换器的配置,这对于处理自定义权限对象或其他特殊类型的认证信息很有帮助。 7. **用户权限管理**:标签中的“用户权限”表明,...
接着创建一个`CustomEditorConfigurer` Bean,将`dateEditor` Bean注册为`java.util.Date`类型的自定义编辑器。这样,当Spring遇到`Date`类型的属性时,会自动使用`dateEditor`进行转换。在`datebean` Bean中,直接...