我在我的背景文件中定义的几个地图。 有没有一种方法,以这些地图将包含所有参赛作品的一个地图,结合无需编写Java代码(和不使用嵌套图)? 我在寻找的地图米当量=新的HashMap(); m.putAll(carMap); m.putAll(bikeMap); 好像应该有一种方式,Spring上下文文件要做到这一点,但UTIL春3.0参考文档部分:地图并不包括这个用例。
<!-- I want to create a map with id "vehicles" that contains all entries of the other maps -->
<util:map id="cars">
<entry key="groceryGetter" value-ref="impreza"/>
</util:map>
<util:map id="bicycles">
<entry key="commuterBike" value-ref="schwinn"/>
</util:map>
利用收集合并在春天的概念,多豆类像这样可以逐步合并。 我用这个在我的项目,以合并列出 ,但可以扩展到合并的地图为好。
如
<bean id="commonMap"
class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map>
<entry key="1" value="one"/>
<entry key="2" value="two"/>
</map>
</property>
</bean>
<bean id="firstMap"
parent="commonMap"
class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map merge="true">
<entry key="3" value="three"/>
<entry key="4" value="four"/>
</map>
</property>
</bean>
与第一个所述第二映射定义的关联是通过做parent
的上属性<bean>
节点和在所述第一地图中的条目与那些在第二使用合并merge
属性上<map>
节点。
我敢打赌,有在春天这个特性没有直接的支持。
然而,写一个工厂bean在Spring使用并不难(有没有试过编译)
public class MapMerger <K,V> implements FactoryBean {
private Map<K,V> result = new HashMap<K,V>();
@Override
public Object getObject() {
return result;
}
@Override
public boolean isSingleton(){
return true;
}
@Override
public Class getObjectType(){
return Map.class;
}
public void setSourceMaps(List<Map<K,V>> maps) {
for (Map<K,V> m : maps) {
this.result.putAll(m);
}
}
}
在春天的配置,只是这样做:
<bean id="yourResultMap" class="foo.MapMerger">
<property name="sourceMaps">
<util:list>
<ref bean="carMap" />
<ref bean="bikeMap" />
<ref bean="motorBikeMap" />
</util:list>
</property>
</bean>