在spring mvc应用程序中使用bean作用域的最佳实践

时间:2013-04-02 11:39:41

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

我已经看到它在很多地方写过,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....
}  

由于我没有定义任何范围,因此默认范围是singleton.So CustomerService和CustomerDAO将仅按容器实例化一次。此外,DAO类将在开始时仅自动连接到Service类一次。由于它将是一个 重要请求 Web应用程序,这意味着( OR 表示)< em>数百个线程将使用两个类的相同实例。

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

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

有人可以向我解释使用bean作用域(对于DAO,服务,控制器和其他bean)来处理繁重的请求Web应用程序的最佳实践吗? 解释这些woulb的任何链接都要感激我。

提前感谢您的建议。

1 个答案:

答案 0 :(得分:3)

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

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