Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring使用自定义比较器创建树映射并填充它_Java_Spring_Treemap - Fatal编程技术网

Java 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

在Java语言中,可以创建类。现在,我想创建一个映射并将其分配给我的一个bean。我还预先知道map值,我对离开Spring注入它们感兴趣。问题是,是否可以声明映射类型、使用构造函数param构建(我需要它来传递类)并使用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实用程序来指定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名称空间,如上一个示例所示。我需要弹簧自己注射。