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集合屬性。