0

我们正在使用Spring 1.2.9但无法使用 map:util

这是我必须进行单元测试的代码的构造函数,

public ViewAction() {
    screen = Collections.synchronizedMap(new HashMap());
    tab = Collections.synchronizedMap(new HashMap());
}

我如何注入 hashmap 并将值添加hashmapconfiguration xml.

注意:问题与使用哈希图无关。它是关于配置 xml 文件的。我尝试了以下但失败了

<bean name="viewactionbean" class="com.test.helper.web.ViewAction">
    <property name="screen">
        <map>
        </map>
    </property>
</bean>

配置上述 XML 文件时出错,BeanCreationException: Error Creating bean with name 'viewactionbean' defined in class path resource

注意:由于我使用的是 Spring 1.2.9,我无法使用“map:util”

4

2 回答 2

1

您可以通过两种不同的方式解决您的问题:

  1. 您可以synchronized(screen)在需要访问screen地图中任何内容的任何地方使用块。这样一来,您就不需要 a synchronizedMap,因为您在访问代码时已经在保护您的代码。
  2. 您可以synchronizedMap在 bean 的 setter 中设置,因此当 Spring 注入它时,您将在其周围放置一个包装器,而不是 Spring 提供的实际实例:

示例设置方法:

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>
于 2013-08-06T11:13:56.707 回答
0

你必须使用这样的东西HashMap

private static Map<K,V> screen = Collections.synchronizedMap(new HashMap<K,V>);

比为了Thread安全你可以使用 .

 synchronized (screen) {

    }
于 2013-08-06T10:33:21.873 回答