Java Spring使用自定义比较器创建树映射并填充它
在Java语言中,可以创建类。现在,我想创建一个映射并将其分配给我的一个bean。我还预先知道map值,我对离开Spring注入它们感兴趣。问题是,是否可以声明映射类型、使用构造函数param构建(我需要它来传递类)并使用Spring进行值注入 这种声明有效,但以后无法注入任何值:Java Spring使用自定义比较器创建树映射并填充它,java,spring,treemap,Java,Spring,Treemap,在Java语言中,可以创建类。现在,我想创建一个映射并将其分配给我的一个bean。我还预先知道map值,我对离开Spring注入它们感兴趣。问题是,是否可以声明映射类型、使用构造函数param构建(我需要它来传递类)并使用Spring进行值注入 这种声明有效,但以后无法注入任何值: <bean id="antennaFilteringManagerMap" class="java.util.TreeMap"> <constructor-arg ref="nameComp
<bean id="antennaFilteringManagerMap" class="java.util.TreeMap">
<constructor-arg ref="nameComparator" />
</bean>
<bean id="nameComparator" class="com.tadic.model.detector.Antenna.NameComparator" />
另一方面,如果我使用Spring map实用程序来指定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>
java.util.TreeMap
或
<util:map map-class="java.util.TreeMap">
<entry key-ref="antenna1" value-ref="locationEventFilteringManager1" />
</util:map>
这是一个很好的解决方法。我为我的具体案例定义了一个子类,它从
TreeMap
扩展而来。此类添加了默认情况下我要在构造函数中使用的比较器:
public static class LocationEventFilteringManagerMap extends
TreeMap<Antenna, LocationEventFilteringManager> {
public LocationEventFilteringManagerMap() {
super(new Antenna.NameComparator());
}
}
公共静态类LocationEventFilteringManager映射扩展
树形图{
公共位置EventFilteringManager映射(){
super(新天线.nameparator());
}
}
之后,我只需要为util map标记指定map类:
<property name="_LocationEventFilteringManagerMap">
<util:map
map-class="mypackage.MyBean.LocationEventFilteringManagerMap">
<entry key-ref="antenna1" value-ref="locationEventFilteringManager1" />
</util:map>
</property>
强制新类以这种方式构造
映射
,我避免了对映射的构造函数arg
注入的需要,并且我可以轻松地填充它。您可以解释一下,“这种声明有效,但以后不能注入值”?您是如何尝试注入的?我的意思是,没有
标记可以放入bean中。我想要两者,用constructor arg
构造TreeMap
,并使用
标记将引用的bean注入其中。您可以获取bean引用并添加到java代码中。否则,如果要在xml文件中执行此操作,请仅使用util名称空间,如上一个示例所示。我需要弹簧自己注射。