Spring不直接支持对Date类型的IOC依赖关系的注入,而提供了类似于Struts中的converte一样的属性编辑器,需要程序员自己写相应的类,并将其注册。
本实例中还涉及到Spring中采用多个配置文件,也涉及到对日期格式的注入-------更加灵活
Date属性类: DatePropertyInjection.java
package com.zhmg.spring;
import java.util.Date;
public class DatePropertyInjection {
private Date date;
public Date getDate() { return date; }
public void setDate(Date date) { this.date = date; } }
|
属性编辑器类:PropertyEditor.java
package com.zhmg.spring;
import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;
/** * 自定义属性编辑器处理java.util.Date类型的属性 * @author Administrator * */ public class PropertyEditor extends PropertyEditorSupport { String format = "yyyy-MM-dd"; public void setFormat(String format) { this.format = format; } @Override public void setAsText(String arg0) throws IllegalArgumentException { SimpleDateFormat dateFormat = new SimpleDateFormat(format);
try { Date date = dateFormat.parse(arg0); this.setValue(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
} |
applicationContextBeans.xml
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="dateProperty" class="com.zhmg.spring.DatePropertyInjection"> <property name="date"> <value>2009-8-28</value> </property> </bean> </beans>
|
applicationContextBeans.xml
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- <bean id="dateProperty" class="com.zhmg.spring.DatePropertyInjection"> <property name="date"> <value>2009-8-28</value> </property> </bean> --> <bean id="editor" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.util.Date"> <bean class="com.zhmg.spring.PropertyEditor"> <!—对日期格式注入--> <property name="format" value="yyyy-MM-dd"/> </bean> </entry> </map> </property> </bean> </beans>
|
测试单元:InjectionTest.java
package com.zhmg.spring;
import junit.framework.TestCase;
import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InjectionTest extends TestCase {
BeanFactory factory; protected void setUp() throws Exception { //采用通配符的方式读取所有以applicationContext开头的配置文件 factory = new ClassPathXmlApplicationContext("applicationContext*.xml"); }
public void testInjection(){
DatePropertyInjection dateProp = (DatePropertyInjection)factory.getBean("dateProperty");
System.out.println("date=" + dateProp.getDate());
}
} |