Sping注入Date类型的3种方式

测试Bean:

public class DateBean {
	private Date birthday;

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

方式1:利用SimpleDateFormat的构造方法注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" 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="dateFormat" class="java.text.SimpleDateFormat">
	<constructor-arg value="yyyy-MM-dd" />
    </bean>
   
	<bean id="datebean" class="com.springDemo1.Date类型注入.DateBean">
		<property name="birthday">
			<bean factory-bean="dateFormat" factory-method="parse">
				<constructor-arg value="2015-12-31" />
			</bean>
		</property>
	</bean>
</beans>


方式2:纯配置,先自定义CustomDateEditor,再转换类型

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" 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="dateEditor"
		class="org.springframework.beans.propertyeditors.CustomDateEditor">
		<constructor-arg>
			<bean class="java.text.SimpleDateFormat">
				<constructor-arg value="yyyy-MM-dd"></constructor-arg>
			</bean>
		</constructor-arg>
		<constructor-arg value="true" />
	</bean>
	<!-- 使 Spring转换为java.util.Date -->
	<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
					<ref bean="dateEditor" />
				</entry>
			</map>
		</property>
	</bean>
</beans>

方式3:先用一个类重写PropertyEditorSupport的setAsText方法,再在配置文件中,配置转换类型就可以了,跟上面方法类似

public class MyDatePropertyEditor extends PropertyEditorSupport {
	private String format;

	public String getFormat() {
		return format;
	}

	public void setFormat(String format) {
		this.format = format;
	}

	// text为需要转换的值,当为bean注入的类型与编辑器转换的类型匹配时就会交给setAsText方法处理
	public void setAsText(String text) throws IllegalArgumentException {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			this.setValue(sdf.parse(text));
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" 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">

	<!--方式3:创建一个类 重写PropertyEditorSupport的setAsText方法 -->
	<!-- 自定义日期编辑器 -->
	<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">  <!--需要编辑的属性类型,是一个map -->
			<map>
				<entry key="java.util.Date">
					<bean class="com.springDemo1.Date类型注入.MyDatePropertyEditor">
						<property name="format" value="yyyy-MM-dd" />  <!--注入需要转换的格式 -->
					</bean>
				</entry>
			</map>
		</property>
	</bean>
</beans>


测试:

public class DateTest {
	@Test
	public void testName() throws Exception {
		
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		
		DateBean bean = (DateBean) context.getBean("datebean");
		System.out.println(bean.getBirthday());
	}
}





你可能感兴趣的:(spring,Date注入)