我应该在Spring bean中使用可变字段吗?

时间:2017-03-15 04:58:20

标签: java spring multithreading hibernate spring-mvc

我使用Spring Framework开发Web应用程序。

我的DAO是一个Spring bean。 (使用@Component注释)经常使用此bean:多个用户访问不同的页面,全部使用此DAO bean查询数据。

为了加快对常用数据的查询,我在这个DAO对象中添加了一个字段:map。因此,如果一个用户从DB查询一个数据集,它将存储在此映射中,查询相同数据集的下一个用户可以直接从地图中获取它。

@Component
class MyDAO {
  private Map<T1, T2> cache = new HashMap<>();
  .....
}

我的问题:在Spring bean中声明一个可变字段是否正确?我担心的是:在多线程程序中,这个字段看起来像是一个共享资源。共享资源需要适当的同步。 Spring是否负责同步,或者Spring是否禁止这种使用?

2 个答案:

答案 0 :(得分:2)

不,春天没有注意同步。您必须确保您的bean是线程安全的。在这种情况下,它意味着必须同步对缓存的访问。

答案 1 :(得分:0)

spring不会对singleton范围内的并发性做任何事情, 您可以在此处阅读有关此主题的内容:https://tarunsapra.wordpress.com/2011/08/21/spring-singleton-request-session-beans-and-thread-safety/