1. 程式人生 > >Spring經常使用屬性的註入及屬性編輯器

Spring經常使用屬性的註入及屬性編輯器

edt 註入 nim jsm fin v2x avt ket jsf



對於對象的註入,我們使用ref方式,能夠指定註入的對象。以下看下對於基本類型的註入。以及當spring無法轉換基本類型進行註入時,怎樣編寫一個相似轉換器的東西來完畢註入。


一。基本類型的註入


以下寫一個簡單類。來看下spring中對於基本類型的註入:


技術分享



<bean id="bean1" class="com.shuitian.spring.Bean1">
	
		<!-- <property name="strValue" value="hello_spring"/> --><!-- 也能夠使用以下的方式 -->
		
		<!-- private String strValue -->
		<property name="strValue">
			<value>hello_spring</value>
		</property>
		
		<!-- private int intValue; -->
		<property name="intValue" value="123"/>
		
		<!-- private List listValue; -->
		<property name="listValue">
			<list>
				<value>list1</value>
				<value>list2</value>
			</list>
		</property>
		
		<!-- private Set setValue; -->
		<property name="setValue">
			<set>
				<value>set1</value>
				<value>set2</value>
			</set>
		</property>
		
		<!-- private String[] arrayValues; -->
		<property name="arrayValues">
			<list>
				<value>array1</value>
				<value>array2</value>
			</list>
		</property>
		
		<!-- private Map mapValue; -->
		<property name="mapValue">
			<map>
				<entry key="k1" value="v1"/>
				<entry key="k2" value="v2"/>
			</map>
		</property>
		
		
		
	</bean>


二,屬性編輯器


在測試類中增加java.util.Date:


技術分享


配置:

<property name="dateValue" value="2009-12-12"/>


假設像前面那樣配置dataValue,為他註入值。會由於string在轉換Date的時候spring無法識別util.Date而報錯,所以,我們要自定義一個類,來將假設轉換的這一過程寫下來。


/*
 * java.util.date屬性編輯器
 */
public class UtilDatePropertyEditor extends PropertyEditorSupport{

	private String pattern;//日期時間格式
	

	public void setPattern(String pattern) {
		this.pattern = pattern;
	}

	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		try {
			Date d=new SimpleDateFormat(pattern).parse(text);
			this.setValue(d);//設置轉換後的值
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
	}
}

註意要繼承PropertyEditorSupport類並實現setAsText方法。


轉換器的配置:


<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="customEditors"
		class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<!-- 屬性編輯器要放到 CustomEditorConfigurer  類的 customEditors(Map類型)成員變量上面去 -->
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
				<!-- 內部bean,僅僅內部使用 -->
					<bean class="com.shuitian.spring.UtilDatePropertyEditor">
						<!-- 註入日期時間格式 -->
						<property name="pattern" value="yyyy-MM-dd"/>
					</bean>
				</entry>
			</map>
		</property>
	</bean>
	
	<!-- 不想通過外界訪問到 -->
	<!-- <bean id="utilDatePropertyEditor" class="com.shuitian.spring.UtilDatePropertyEditor"> 
		</bean> -->
		
</beans>


add進spring的源代碼,圍觀下:


技術分享




這一配置的原因就是,我們要將自定義的屬性編輯器,放到CustomEditorConfigurer 它的customEditors裏面,這樣spring才幹使用到它。









Spring經常使用屬性的註入及屬性編輯器