Spring SetFactoryBean實例

SetFactoryBean 類爲開發者提供了一種可在 Spring bean 配置文件創建一個具體的Set集合(HashSet 和 TreeSet)。

這裏有一個 ListFactoryBean。例如,在運行時它將實例化 HashSet,並注入到一個 bean 屬性中。

package com.yiibai.common;

import java.util.Set;

public class Customer
{
private Set sets;
//...
}

Spring的bean配置文件。

<bean id="CustomerBean" class="com.yiibai.common.Customer">
    <property name="sets">
        <bean class="org.springframework.beans.factory.config.SetFactoryBean">
            <property name="targetSetClass">
                <value>java.util.HashSet</value>
            </property>
            <property name="sourceSet">
                <list>
                    <value>one</value>
                    <value>2</value>
                    <value>three</value>
                </list>
            </property>
        </bean>
    </property>
</bean>

另外,還可以使用 util的模式 和util:set 來做到同樣的事情。

<bean id="CustomerBean" class="com.yiibai.common.Customer">
    <property name="sets">
        <util:set set-class="java.util.HashSet">
            <value>one</value>
            <value>2</value>
            <value>three</value>
        </util:set>
    </property>
</bean>

請記住必須包函 util 模式,否則會出現下面的錯誤:

Caused by: org.xml.sax.SAXParseException:
The prefix "util" for element "util:set" is not bound.

執行結果

package com.yiibai.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App
{
public static void main( String[] args )
{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

    Customer cust = (Customer)context.getBean("CustomerBean");
    System.out.println(cust);

}

}

輸出結果:

Customer [sets=[2, one, three]] Type=[class java.util.HashSet]

實例化 HashSet,在運行時注入到客戶的set集合屬性。

下載代碼 – http://pan.baidu.com/s/1o7woXQU