【问题标题】:Shall I use mutable field in a Spring bean?我应该在 Spring bean 中使用可变字段吗?
【发布时间】:2017-03-15 04:58:19
【问题描述】:

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

我的 DAO 是一个 Spring bean。 (使用@Component注解)这个bean使用频繁:多个用户访问不同的页面,都使用这个DAO bean来查询数据。

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

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

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

【问题讨论】:

    标签: java spring multithreading hibernate spring-mvc


    【解决方案1】:

    不,spring 不负责同步。您必须确保您的 bean 是线程安全的。在这种情况下,这意味着对缓存的访问必须同步。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-08-12
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 2012-01-20
        • 2011-02-11
        • 1970-01-01
        相关资源
        最近更新 更多