在Spring MVC应用程序中使用bean作用域的最佳实践

muk*_*und 6 java model-view-controller spring scope javabeans

我已经看到它在很多地方都写过,应将Spring应用程序的DAO和Service类限制为单例范围。
在我的应用程序中,我具有以下服务类别

@Service
public class CustomerServiceImpl implements CustomerService {

    @Autowired
    private CustomerDAO customerDAO;

    .......
    parameterised methods only....
}  
Run Code Online (Sandbox Code Playgroud)

和DAO班

@Repository
public class CustomerDAOImpl implements CustomerDAO {

@Autowired
private SessionFactory sessionFactory;

...............
parameterised methods only....
}  
Run Code Online (Sandbox Code Playgroud)

由于我没有定义任何作用域,因此默认作用域是单例。因此,每个容器只将CustomerService和CustomerDAO实例化一次,而且DAO类在开始时仅自动连接到Service类一次。将成为一个繁重的请求 Web应用程序,这意味着(这意味着),数百个线程将使用两个类的相同实例。

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

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

谁能为我解释在请求繁重的Web应用程序中使用bean作用域(用于DAO,Service,Controller和其他bean)的最佳实践吗?
任何解释这些的链接都会令我感激。

感谢您的建议。

Gab*_*ica 5

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

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