1

我正在尝试初始化此地图 bean:

<bean id="totalEventCountStore" class="java.util.concurrent.ConcurrentHashMap">
    <constructor-arg type="java.util.Map">
        <map key-type="com.company.EventType" value-type="java.util.concurrent.atomic.AtomicLong">
            <entry key="ROUTED_REQUEST">
                <bean class="java.util.concurrent.atomic.AtomicLong">
                    <constructor-arg index="0" type="long" value="0"/>
                </bean>
            </entry>

.... more entries .....

</bean>

我得到:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'totalEventCountStore' defined in class path resource [diagnostics.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [int]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?

有谁知道为什么会这样?ConcurrentHashMap只有一个带Map参数的构造函数。

谢谢。

4

2 回答 2

2

我不太确定您的问题是什么,但我确定它不是:它与ConcurrentHashMap初始化无关,也与AtomicLong.

这是 Spring 3.2.4 成功加载的 applicationContext 的摘录:

<bean id="totalEventCountStore" class="java.util.concurrent.ConcurrentHashMap">
<constructor-arg type="java.util.Map">
    <map key-type="java.lang.String" value-type="java.util.concurrent.atomic.AtomicLong">
        <entry key="ROUTED_REQUEST">
            <bean class="java.util.concurrent.atomic.AtomicLong">
                <constructor-arg index="0" value="0"/>
            </bean>
        </entry>
    </map>
</constructor-arg>
</bean>

我只是拿了你的代码并替换了com.company.EventType我没有的String......也许你应该看看,com.company.EventType因为它是我测试的唯一区别。

于 2014-06-10T10:23:16.420 回答
1

这实际上不是一个答案,但我找到了一种可行的方法。

<bean id="totalEventCountStore" class="java.util.concurrent.ConcurrentHashMap">
    <constructor-arg ref="eventCountInit"/>
</bean>

<util:map id="eventCountInit" map-class="java.util.HashMap" key-type="com.company.RouterDiagnosticEventType" value-type="java.util.concurrent.atomic.AtomicLong">
    <entry key="ROUTED_REQUEST">
        <bean class="java.util.concurrent.atomic.AtomicLong"/>
    </entry>
    <entry key="ROUTED_REQUEST_WITH_METADATA">
        <bean class="java.util.concurrent.atomic.AtomicLong"/>
    </entry>

... more entreies like these ...

</util:map>

不过,我真的不知道为什么这种方式有效,而另一种方式无效,所以如果有人发现我会非常感激。

更令人费解的是,那个[int]arg 是从哪里来的?

于 2014-06-10T10:14:00.817 回答