《Spring Recipes》第一章筆記:Defining Collections Usin...

問題:

使用基本的集合標籤,沒法指定集合的類型,如LinkedList,TreeSet,TreeMap。而且,不能使用refer功能,在不一樣的bean配置中共享集合。


解決方案:

Spring提供ListFactoryBean,SetFactoryBean,MapFactoryBean和 Utility Schema來解決此類問題。

1.使用FactoryBen 定義集合。

FactoryBean的targetXXXClass屬性值指定集合類型,sourceXXX屬性指定集合元素的值。java

<bean id="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
	<property name="prefixGenerator" ref="datePrefixGenerator" />
	<property name="initial" value="100000" />
	
	<property name="suffixes">
		<!-- 使用FactoryBean -->
		<bean class="org.springframework.beans.factory.config.SetFactoryBean">
                        <!-- 設置集合類型 -->
			<property name="targetSetClass">
				<value>java.util.TreeSet</value>
			</property>
                        <!-- 設置集合元素 -->
			<property name="sourceSet">
				<set>
				    <value>5</value>
				    <value>10</value>
				    <value>20</value>
				</set>
			</property>
		</bean>
	</property>
	
</bean>

2.使用util schema設置集合類型和集合元素。

beans標籤中添加xmlns:util="http://www.springframework.org/schema/util",xsi:schemaLocation中添加http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
	<bean id="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
		<property name="suffixes">
                        <!-- 設置集合類型 -->
			<util:set set-class="java.util.TreeSet">
                                <!-- 設置集合元素 -->
				<value>5</value>
				<value>10</value>
				<value>20</value>
			</util:set>
		</property>
	</bean>

</beans>

3.使用FactoryBen定義stand-alone 集合。

<beans ...>
	<bean id="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
		<property name="suffixes">
			<ref local="suffixes" />
		</property>
	</bean>

	<bean id="suffixes" class="org.springframework.beans.factory.config.SetFactoryBean">
                <!-- 設置集合類型 -->
	        <property name="targetSetClass">
		    <value>java.util.TreeSet</value>
    	        </property>
                <!-- 設置集合元素 -->
		<property name="sourceSet">
			<set>
				<value>5</value>
				<value>10</value>
				<value>20</value>
			</set>
		</property>
	</bean>

</beans>

4.使用Utility Schema定義stand-alone 集合。

<beans ...>
<bean id="sequenceGenerator"
class="com.apress.springrecipes.sequence.SequenceGenerator">
	<property name="suffixes">
		<ref local="suffixes" />
	</property>
</bean>

<util:set id="suffixes" set-class="java.util.TreeSet" >
	<value>5</value>
	<value>10</value>
	<value>20</value>
</util:set>

</beans>

5.集合的類型必須爲java.util.Set,java.util.List,java.util.Map的子類型,不然容器初始化會拋出異常。

相關文章
相關標籤/搜索