我试图初始化这个地图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
参数的构造函数。
感谢。
答案 0 :(得分: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
...也许你应该看看{{1}},因为这是我测试的唯一区别
答案 1 :(得分: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来自哪里?