【问题标题】:best practices of using bean scopes in spring mvc application在 Spring MVC 应用程序中使用 bean 范围的最佳实践
【发布时间】:2013-03-23 16:36:30
【问题描述】:

我在很多地方都看到过,Spring 应用程序的 DAO 和 Service 类应该是singleton范围的。
在我的应用程序中,我有以下服务类

@Service
public class CustomerServiceImpl implements CustomerService {

    @Autowired
    private CustomerDAO customerDAO;

    .......
    parameterised methods only....
}  

还有一个 DAO 类

@Repository
public class CustomerDAOImpl implements CustomerDAO {

@Autowired
private SessionFactory sessionFactory;

...............
parameterised methods only....
}  

由于我没有定义任何范围,所以默认范围是单例。因此 CustomerService 和 CustomerDAO 都只会在每个容器中实例化一次。此外,DAO 类将在开始时仅自动连接到 Service 类一次。由于它将是一个繁重的请求网络应用程序,这意味着(OR是否意味着)数百个线程将使用这两个类的相同实例。

那么在这种情况下如何保证线程安全
那么xml中定义的hibernate sessionfactory bean的范围呢?

我对 spring mvc 应用程序中的 bean 范围和线程安全感到非常困惑。 Springsource 文档没有为 Web 应用程序清楚地解释这些。

谁能解释一下使用 bean 范围(用于 DAO、Service、Controller 和其他 bean)来处理重请求 Web 应用程序的最佳实践吗?
任何解释这些的链接都会感谢我。

提前感谢您的建议。

【问题讨论】:

    标签: java spring model-view-controller scope javabeans


    【解决方案1】:

    只要您的服务和 DAO 单例不保持状态(不保持实例变量 - 其他 bean 除外 - 在方法内部操作),线程安全就没有问题。

    关于会话工厂, spring web-app 中的默认休眠会话范围基于“每个请求一个休眠会话”模式,这意味着您将为每个 http 请求(线程)拥有一个会话,因此也没有理由担心并发性。

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      相关资源
      最近更新 更多