码迷,mamicode.com
首页 > 编程语言 > 详细

spring 学习(一)自定义属性编辑器

时间:2017-10-18 13:19:55      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:throws   date   saveas   system   keyword   orm   catch   ace   spring   

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

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

比如: 
有一个类里面有一个Date属性 

Java代码  
  1. public class Bean1 {  
  2.      private Date dateValue;  
  3.      public void setDateValue(Date dateValue) {  
  4.         this.dateValue = dateValue;  
  5.     }  
  6. }  


applicationContext.xml配置文件如下: 

Java代码  
  1. <!--将bean1中的Date赋值2008-08-15,spring会认为2008-08-15是String,无法转换成Date,会报错!-->  
  2. <bean id="bean1" class="com.bjsxt.spring.Bean1">  
  3.       <property name="dateValue">  
  4.          <value>2008-08-15</value>  
  5.     </property>  
  6. </bean>  
  7. <!-- 于是定义属性编辑器 -->        
  8. <bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
  9.     <property name="customEditors">  
  10.         <map>  
  11.             <entry key="java.util.Date">  
  12.                 <bean class="com.bjsxt.spring.UtilDatePropertyEditor">  
  13.                                         <!--干脆把format也注入,灵活处理格式-->  
  14.                     <property name="format" value="yyyy-MM-dd"/>  
  15.                 </bean>  
  16.             </entry>  
  17.         </map>  
  18.     </property>  
  19. </bean>     


UtilDatePropertyEditor.java 如下,必须继承java.beans.PropertyEditorSupport类,覆写setAsText()方法 

Java代码  
  1. import java.beans.PropertyEditorSupport;  
  2. import java.text.ParseException;  
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. /** 
  7.  * java.util.Date属性编辑器  
  8.  * @author Administrator 
  9.  * 
  10.  */  
  11. public class UtilDatePropertyEditor extends PropertyEditorSupport {  
  12.   
  13.     private String format="yyyy-MM-dd";  
  14.       
  15.     @Override  
  16.     public void setAsText(String text) throws IllegalArgumentException {  
  17.         System.out.println("UtilDatePropertyEditor.saveAsText() -- text=" + text);  
  18.           
  19.         SimpleDateFormat sdf = new SimpleDateFormat(format);  
  20.         try {  
  21.             Date d = sdf.parse(text);  
  22.             this.setValue(d);  
  23.         } catch (ParseException e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.     }  
  27.   
  28.     public void setFormat(String format) {  
  29.         this.format = format;  
  30.     }  
  31.   
  32. }  


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

测试一下: 

Java代码  
    1. import org.springframework.beans.factory.BeanFactory;  
    2. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    3.   
    4. import junit.framework.TestCase;  
    5.   
    6. public class InjectionTest extends TestCase {  
    7.       
    8.     private BeanFactory factory;  
    9.       
    10.     @Override  
    11.     protected void setUp() throws Exception {  
    12.         factory = new ClassPathXmlApplicationContext("applicationContext.xml");   
    13.     }  
    14.   
    15.     public void testInjection1() {  
    16.         Bean1 bean1 = (Bean1)factory.getBean("bean1");  
    17.         System.out.println("bean1.dateValue=" + bean1.getDateValue());  
    18.     }  
    19.       

spring 学习(一)自定义属性编辑器

标签:throws   date   saveas   system   keyword   orm   catch   ace   spring   

原文地址:http://www.cnblogs.com/hanguocai/p/7686047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!