春天单身豆在高负荷

时间:2010-11-22 02:18:20

标签: multithreading spring singleton

嘿,我有一个关于多线程的问题。首先,有几个DispatcherServlet / DispatcherPorlet实例?它总是唯一的吗?即使每秒有10个请求呢?那么默认情况下单例服务呢?如果我有一个validateService bean被注入到处理程序中以提供请求验证,作为一个单例(默认情况下),我可以依赖它是一个单独的事实,并且在某些情况下它不会被重新实例化吗?

2 个答案:

答案 0 :(得分:0)

根据负载, servlet容器会创建多个servlet实例,开发人员无法控制。但在大多数情况下,容器维护每个servlet的单个实例(因为servlet应该是线程安全的)。

对于Spring singleton bean,这些是每个Web应用程序的单例 - Spring应用程序上下文存储在servlet上下文中(您可以使用WebApplicationContextUtils.getWebApplicationContext(ServletContext)访问它)。

至于可靠性:是的,你可以依赖这样一个事实:在一个Spring应用程序上下文的范围内,每个单例bean只有一个实例

答案 1 :(得分:0)

这是一个有趣的问题。

this previous question中所述,只允许容器实例化一个servlet实例。在这种情况下,您可以保证有一个弹簧上下文和一个单例。

问题是Servlet规范的早期版本会发生什么,我不确定是否明确指定了这种行为。

但实际上,容器只会实例化一个servlet实例 - 我从来没有见过其他人。因此,假设您只获得一个应用程序上下文是安全的。