【发布时间】:2015-03-18 08:38:23
【问题描述】:
上下文:Web 应用程序
我以前没有使用过 Spring,但是根据 Spring 文档,所有的 bean 都是 singleton,除非我们将它们声明为 prototype。
- 不使用 Spring:
通常我会在调用业务/服务层时实例化新的 DAO。 如果是 RESTfull 服务,我会实例化几乎所有依赖于调用的对象。
- 带弹簧:
我可以使用@Repository 注释数据访问类,也可以将@Service 用于服务层类。
所以我的带有上述注释的类默认为singleton。
有一个 @Scope 注释,我们可以将它们声明为原型,但似乎没有人这样做。
- 没有弹簧:
new Object();每次 - 带弹簧:
singleton
我的问题是,
- 我之前使用的方式(每次创建新实例)不正确?
- 如果
@Repository是singleton,如果没有解决这样的问题,它如何处理线程安全? (假设它是由 spring 代理完成的) - 什么是最佳实践,
@Repository就够了,还是加上@Scope('prototype')会更好? - 我没有看到有人使用
@Scope('prototype')和@Repository(根据教程、博客等)。有什么众所周知的原因吗? - 如果我的 DAO 类被多个非常高频率的大量线程访问怎么办? (这是我最关心的)
谢谢
【问题讨论】:
标签: java multithreading spring spring-mvc