在 Spring XML 配置中,常需將集合或基本類型直接定義為 Bean,供其他元件注入。本文匯總新舊兩代配置風格,助你快速選擇最適合的方式。
<bean id="emails" class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map>
<entry key="pechorin" value="pechorin@hero.org"/>
<entry key="raskolnikov" value="raskolnikov@slums.org"/>
<entry key="stavrogin" value="stavrogin@gov.org"/>
<entry key="porfiry" value="porfiry@gov.org"/>
</map>
</property>
</bean>
<util:map id="emails" map-class="java.util.TreeMap">
<entry key="pechorin" value="pechorin@hero.org"/>
<entry key="raskolnikov" value="raskolnikov@slums.org"/>
<entry key="stavrogin" value="stavrogin@gov.org"/>
<entry key="porfiry" value="porfiry@gov.org"/>
</util:map>
灰色屬性(map-class、key-type、value-type)可省略,預設為 LinkedHashMap。
<bean id="emails" class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<value>pechorin@hero.org</value>
<value>raskolnikov@slums.org</value>
<value>stavrogin@gov.org</value>
<value>porfiry@gov.org</value>
</list>
</property>
</bean>
<util:list id="emails" list-class="java.util.LinkedList">
<value>pechorin@hero.org</value>
<value>raskolnikov@slums.org</value>
<value>stavrogin@gov.org</value>
<value>porfiry@gov.org</value>
</util:list>
<bean id="emails" class="org.springframework.beans.factory.config.SetFactoryBean">
<property name="sourceSet">
<set>
<value>pechorin@hero.org</value>
<value>raskolnikov@slums.org</value>
<value>stavrogin@gov.org</value>
<value>porfiry@gov.org</value>
</set>
</property>
</bean>
<util:set id="emails" set-class="java.util.TreeSet">
<value>pechorin@hero.org</value>
<value>raskolnikov@slums.org</value>
<value>stavrogin@gov.org</value>
<value>porfiry@gov.org</value>
</util:set>
利用建構子注入:
<bean id="countNum" class="java.lang.Integer">
<constructor-arg value="5"/>
</bean>
<bean id="countMessage" class="java.lang.String">
<constructor-arg value="Hello"/>
</bean>
其他基本類型(Boolean、Long、Double 等)同理。
@Component
public class MailService {
@Resource(name = "emails")
private Map<String, String> emailMap;
@Resource(name = "emailsList")
private List<String> emailList;
@Resource(name = "countNum")
private Integer threshold;
}
util: 命名空間,語義清晰、支援型別屬性、可直接指定實作類別。FactoryBean 風格,兩者可共存。Spring 提供豐富的集合與基本類型 Bean 定義方式,善用 util: 標籤能大幅簡化 XML 配置,提升可讀性與維護性。