我使用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是否禁止这种使用?
答案 0 :(得分:2)
不,春天没有注意同步。您必须确保您的bean是线程安全的。在这种情况下,它意味着必须同步对缓存的访问。
答案 1 :(得分:0)
spring不会对singleton
范围内的并发性做任何事情,
您可以在此处阅读有关此主题的内容:https://tarunsapra.wordpress.com/2011/08/21/spring-singleton-request-session-beans-and-thread-safety/