spring 自定义属性编辑器
前言: 使用spring的属性注入可以为一个实体bean(有对应的set方法)的属性注入值,例如:
<bean id="studySPro" class="study.spring.StudySPro">
<property name="intValue" value="100"></property>
<property name="strValue" value="stringValue"></property>
<property name="doubleValue" value="10.36"></property>
<property name="listValue">
<list>
<value>listValue1</value>
<value>listValue2</value>
<value>listValue3</value>
</list>
</property>
<property name="mapValue">
<map>
<entry key="key1" value="value1"/>
<entry key="key2" value="value2"/>
<entry key="key3" value="value3"/>
</map>
</property>
<property name="setValue">
<set>
<value>setValue1</value>
<value>setValue2</value>
<value>setValue3</value>
</set>
</property>
<property name="arrayStrValue">
<list>
<value>arrayStrValue1</value>
<value>arrayStrValue2</value>
<value>arrayStrValue3</value>
</list>
</property>
<property name="dateValue" value="1988-02-16"></property>
</bean>
当在对一个java.util.Date类型的属性注入值的时候,会出现异常,因为spring默认的方式不能够将类似"1988-02-16"的字符串解析为java.util.Date类型.为了解决这个问题,我们需要自己编写将类似"1988-02-16"这样的字符串解析为Date对象的方式,就是这里要说明的 “自定义属性编辑器” .
首先定义一个"自定义属性编辑器类",该类继承了java.beans.PropertyEditorSupport,并且覆写该类的setAsText(String text)方法,通过这个text参数,我们可以拿到欲转换的字符串,例如"1988-02-16".
package study.spring;
import java.beans.PropertyEditorSupport;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DatePropetyEdtor extends PropertyEditorSupport{
private String format = "yyyy-MM-dd";
@Override
public void setAsText(String text) throws IllegalArgumentException {
DateFormat df = new SimpleDateFormat(format);
try {
Date date = df.parse(text);
this.setValue(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意 : 这个setAsText方法并没有返回值,我们通过调用setValue(Object obj)方法使得我们将字符串转换后的Date对象生效.
最后,要使得spring能够识别并使用我们的自定义属性编辑器,我们需要将这个类注入到一个spring的类的属性中,该属性是org.springframework.beans.factory.config.CustomEditorConfigurer类的customEditors属性,该属性是一个map类型,我们的注入方式类似这样:
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<bean class="study.spring.DatePropetyEdtor"></bean>
</entry>
</map>
</property>
</bean>
</beans>
到这里,我们的自定义属性编辑器就可以正常工作了.
其他 :
对于例子代码中 <property name="dateValue" value="1988-02-16"></property>,如果这里我们注入的值变为 "1988/02/16",则又会出异常了,因为我们的 format = "yyyy-MM-dd",对于这种情况,我们可以将转换格式format也抽取出来,使用spring的注入来为其赋值. 例如在构造函数中为format赋值,或者为format添加一个set方法。
推荐阅读
-
spring为java.util.Properties类型的属性进行赋值过程解析
-
spring级联属性赋值的两种方式解析
-
完美实现保存和加载easyui datagrid自定义调整列宽位置隐藏属性功能
-
spring boot tomcat jdbc pool的属性绑定
-
详解HTML5 data-* 自定义属性
-
vue.js 获取当前自定义属性值
-
你知道@RequestMapping的name属性有什么用吗?【享学Spring MVC】
-
[Spring Boot]使用自定义注解统一请求返回值
-
JSP自定义标签-标签属性_动力节点Java学院整理
-
HTML5的自定义属性data-*详细介绍和JS操作实例