我们正在使用Spring 1.2.9
,我们无法使用map:util
这是我必须进行单元测试的代码构造函数,
public ViewAction() {
screen = Collections.synchronizedMap(new HashMap());
tab = Collections.synchronizedMap(new HashMap());
}
如何注入hashmap并将值添加到hashmap
中的configuration xml
。
注意:问题不是关于使用HASHMAP。这是关于配置xml文件。我尝试了以下内容并失败了
<bean name="viewactionbean" class="com.test.helper.web.ViewAction">
<property name="screen">
<map>
</map>
</property>
</bean>
配置上述XML文件时出错,是 BeanCreationException:在类路径资源
中定义名为“viewactionbean”的bean时出错注意:由于我使用的是Spring 1.2.9,因此我无法使用“map:util”
答案 0 :(得分:1)
您可以通过两种不同的方式解决问题:
synchronized(screen)
块来访问screen
地图中的任何内容。这样您就不需要synchronizedMap
,因为您在访问代码时已经在保护代码。synchronizedMap
,所以当Spring注入它时,你会在它周围放置一个包装器而不是Spring提供的实际实例:示例setter方法:
public void setScreen(Map screen) {
this.screen = Collections.synchronizedMap(screen);
}
最后一种方法的问题在于,如果您需要在bean中的单个方法内的地图中执行两个或更多操作,则仍需要synchronized(screen)
块来防止竞争条件。
要在春天配置地图,您应该可以这样做:
<bean id="..." class="....">
<property name="screen">
<map>
<entry key="myKey" value="myValue" />
</map>
</property>
</bean>
答案 1 :(得分:0)
您必须对HashMap
使用类似的内容。
private static Map<K,V> screen = Collections.synchronizedMap(new HashMap<K,V>);
比你可以使用的Thread
安全。
synchronized (screen) {
}