代码之家  ›  专栏  ›  技术社区  ›  lisak

高负荷春大豆

  •  2
  • lisak  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  0
  •   Community CDub    8 年前

    这是个有趣的问题。

    如中所述 this previous question ,容器只允许实例化一个servlet实例。在这种情况下,保证有一个spring上下文和一个singleton。

    问题是以前版本的Servlet规范会发生什么,我不确定是否显式地指定了这种行为。

    不过,在实践中,容器只实例化过一个servlet实例——我从来没有看到过这样的实例。所以可以肯定的是,你只会得到一个应用程序上下文。

        2
  •  0
  •   Neeme Praks Tim Pote    14 年前

    取决于负载, servlet容器创建了大量的servlet实例,开发人员对此没有任何控制权 . 但在大多数情况下,容器维护每个servlet的单个实例(因为servlet无论如何都应该是线程安全的)。

    至于春天 singleton beans,这些是每个web应用程序的单例-Spring应用程序上下文存储在servlet上下文中(您可以使用 WebApplicationContextUtils.getWebApplicationContext(ServletContext) ).

    至于可靠性:是的,您可以依赖这样一个事实:在一个Spring应用程序上下文的作用域中, 每个单例bean只有一个实例 .