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());  
    }  
      
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值