弹簧配置中的同步映射.1.2.9

时间:2013-08-06 10:20:12

标签: spring hashmap

我们正在使用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”

2 个答案:

答案 0 :(得分:1)

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

  1. 您可以在所需的任何位置使用synchronized(screen)块来访问screen地图中的任何内容。这样您就不需要synchronizedMap,因为您在访问代码时已经在保护代码。
  2. 您可以在bean的setter中设置synchronizedMap,所以当Spring注入它时,你会在它周围放置一个包装器而不是Spring提供的实际实例:
  3. 示例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) {

    }