Spring XML配置含EnumMap的Resources Bean遇阻,求指导
问题:Spring XML配置中如何给EnumMap属性赋值?
我手头有一段Java代码,现在要在Spring XML配置文件里配置对应的Bean,已经写了一部分配置,但卡在了EnumMap<TypeEnum, String>这个属性的配置上,想请教怎么用util:map来搞定这个配置。
我的Java代码:
public enum TypeEnum { TYPE1, TYPE2, TYPE3; } public class Resources { List<String> suppliers; EnumMap<TypeEnum, String> items; // setter和getter方法 }
已完成的部分配置片段:
<bean name="products" class="com.company.xxxx.Resources"> <property name="suppliers"> <list> <value>suppliers1</value> <!-- 这里省略其他supplier项 --> </list> </property> <!-- 这里不知道怎么配置items这个EnumMap属性 --> </bean>
解决方案:
要配置EnumMap,你只需要借助Spring的util:map标签,指定key-type为你的枚举类全路径,Spring就会自动识别枚举类型的键,创建对应的EnumMap实例并注入。
完整的配置示例如下:
<!-- 首先要在beans根标签里引入util命名空间,否则util:map标签无法被识别 --> <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.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <bean name="products" class="com.company.xxxx.Resources"> <property name="suppliers"> <list> <value>suppliers1</value> <value>suppliers2</value> <!-- 可以按需添加更多供应商 --> </list> </property> <property name="items"> <!-- 指定key-type为你的枚举类全限定名 --> <util:map key-type="com.company.xxxx.TypeEnum" value-type="java.lang.String"> <entry key="TYPE1" value="ItemA"/> <entry key="TYPE2" value="ItemB"/> <entry key="TYPE3" value="ItemC"/> </util:map> </property> </bean> </beans>
这里有几个需要注意的点:
- 必须在Spring XML的根
beans标签中引入util命名空间及其对应的XSD约束,不然util:map标签会报错。 - 通过
key-type指定枚举类的全路径后,Spring会自动把这个map实例化为EnumMap类型,完美匹配Resources类里的items属性类型。 entry标签里的key直接写枚举的常量名就行,Spring会自动转换成对应的枚举实例。
这样配置后,Spring容器初始化时就会正确创建Resources实例,同时注入suppliers列表和items这个EnumMap了。
内容的提问来源于stack exchange,提问作者user3858442
相关产品推荐
相关产品推荐

