在Java语言中,可以创建TreeMaps using our own Comparator类。现在,我想创建一个映射并将其分配给我的一个bean。我事先也知道地图值,我有兴趣让 Spring 注入它们。问题是,是否可以声明一个地图类型,使用构造函数参数构建(我需要它来传递Comparator
类)并使用Spring进行值注入?
这种声明有效,但以后不能注入任何值:
<bean id="antennaFilteringManagerMap" class="java.util.TreeMap">
<constructor-arg ref="nameComparator" />
</bean>
<bean id="nameComparator" class="com.tadic.model.detector.Antenna.NameComparator" />
另一方面,如果我使用Spring map实用程序,there are some ways来指定map的类,但是无法传递构造函数arg:
<bean class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="targetMapClass">
<value>java.util.TreeMap</value>
</property>
<property name="sourceMap">
<map>
<entry key-ref="antenna1" value-ref="locationEventFilteringManager1" />
</map>
</property>
</bean>
或
<util:map map-class="java.util.TreeMap">
<entry key-ref="antenna1" value-ref="locationEventFilteringManager1" />
</util:map>
答案 0 :(得分:1)
这是一个很好的解决方法。我为我的特定情况定义了一个从TreeMap
扩展的子类。这个类在构造函数中添加了我想默认使用的 Comparator :
public static class LocationEventFilteringManagerMap extends
TreeMap<Antenna, LocationEventFilteringManager> {
public LocationEventFilteringManagerMap() {
super(new Antenna.NameComparator());
}
}
之后,我只需要在util-map标签中指定map-class:
<property name="_LocationEventFilteringManagerMap">
<util:map
map-class="mypackage.MyBean.LocationEventFilteringManagerMap">
<entry key-ref="antenna1" value-ref="locationEventFilteringManager1" />
</util:map>
</property>
强制新类以这种方式构造Map
,我避免需要constructor-arg
注入Map,我可以很容易地填充它。