Spring 自定义属性编辑器

 

Spring DI注入的时候可以把普通属性注入进来,但是像Date类型的就无法被识别。这时可以通过Spring的属性编辑器把配置文件中的字符串转化成相应的对象进行注入。

Spring有自带的属性编辑器,我们也可以写自定义的属性编辑器

 

自定义属性编辑器:

继承java.beans.PropertyEditorSupport类,重写其中的setAsText(String text)方法。

再把自定义的属性编辑器注入到Spring中。

 

例子:

JavaBean类


Java代码  

 
   
 
package
  
import
import
import
import
  
public class
  
private
  
public
return
    }  
  
public void
this.birthday = birthday;  
    }  
}


 

自定义属性编辑器


Java代码  

 
   
 
package
  
import
import
import
  
//自己写一个自定义属性编辑器来继承属性编辑器PropertyEditorSupport
public class DatePropertyEditor extends
  
//时间的格式
    String format;  
  
public
return
    }  
  
public void
this.format = format;  
    }  
  
//需要重写属性编辑器的setAsText()方法
@Override
public void
try
new
//把转换后的值传进去
this.setValue(f.parse(text));  
catch
            ex.printStackTrace();  
        }  
    }  
}

 

 

spring配置文件 applicationContext.xml :


Xml代码  



 
   
 
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
>
  
<!-- 普通属性注入 -->
<bean id="userBean" class="com.cos.entity.UserBean">
<!-- 时间属性,需要属性编辑器 -->
<property name="birthday" value="2011-03-16"/>
</bean>
  
<!-- 特殊属性的注入.把特殊属性注入到CustomEditorConfigurer Bean 里 -->
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<bean class="com.cos.entity.DatePropertyEditor">
<property name="format" value="yyyy-MM-dd"/>
</bean>
</entry>
</map>
</property>
</bean>
</beans>

org.springframework.beans.factory.config.CustomEditorConfigurer类可以读取PropertyEditorSupport类及子类,将字符串转化为指定的类型。

PropertyEditorSupport类把要转化的Date类型注入到customEditors  Map中。

 

 

测试类:


Java代码  

 
   
 
package
  
import
import
  
public class
  
public static void
//通过spring配置文件返回Bean的工厂对象
new ClassPathXmlApplicationContext("applicationContext.xml");  
//Bean工厂通过Bean的id得到JavaBean
"userBean");  
""+ub.getBirthday());  
    }  
}