Multithreading 高负荷下的弹簧单体豆类

Multithreading 高负荷下的弹簧单体豆类,multithreading,spring,singleton,Multithreading,Spring,Singleton,嘿,我有一个关于多线程的问题。首先,DispatcherServlet/DispatcherPortlet有多少个实例?它总是唯一的吗?即使每秒有10个请求?默认情况下是单例的服务呢。如果我有一个validationService bean,它被注入到处理程序中以提供请求验证,作为一个单例(默认情况下),那么我可以依赖这样一个事实:它是一个单例,并且在某些情况下不会被重新实例化吗 根据负载的不同,servlet容器创建了大量的servlet实例,开发人员对此没有任何控制权。但是在大多数情况下,容

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

根据负载的不同,servlet容器创建了大量的servlet实例,开发人员对此没有任何控制权。但是在大多数情况下,容器维护每个servlet的一个实例(因为servlet被认为是线程安全的)

对于Spring
singleton
Bean,这些是每个web应用程序的单例—Spring应用程序上下文存储在servlet上下文中(您可以通过访问它)


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

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

对于Spring
singleton
Bean,这些是每个web应用程序的单例—Spring应用程序上下文存储在servlet上下文中(您可以通过访问它)


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

这是一个有趣的问题

如中所述,容器只允许实例化一个servlet实例。在本例中,保证有一个spring上下文和一个单例

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


但在实践中,容器只实例化一个servlet实例——我从来没有见过一个容器不这样做。因此,可以安全地假设您将只获得一个应用程序上下文。

这是一个有趣的问题

如中所述,容器只允许实例化一个servlet实例。在本例中,保证有一个spring上下文和一个单例

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


但在实践中,容器只实例化一个servlet实例——我从来没有见过一个容器不这样做。因此,可以安全地假设您只会得到一个应用程序上下文。

但这里有一个冲突,如果servlet容器在高负载下创建了许多实例,它们要么引用了singleton DisactherServlet(这不太可能)或者为每个容器servlet创建一个DispatcherServlet实例,这是不可能的,除非每个DispatcherServlet afaik都有一个句柄(这是无法想象的),如果每个DispatcherServlet都有一个句柄,那么spring应用程序的上下文必须和HandlerSeems一样多,您没有仔细阅读我的响应。我并没有说每个SERVLET实例都有一个Spring ApplicationContext。我说过,每个WEB应用程序都有一个上下文,不管有多少个servlet实例,或者您定义了多少个不同的DispatcherServlet(您可以定义多个),实际上每个servlet实例都有一个Spring ApplicationContext(当然是在WEB应用程序中)。容器将请求委托给单例Servlet。当然,您可以定义多个Dispatcher,但我们讨论的是一个Dispatcher的实例,而不是定义3个Dispatcher……而且总是只有一个实例。这一说法与我所知道的有关Spring WebApplicationContext如何运行的所有内容都是相反的——您能否根据您所声称的内容提供一个源代码?如前所述,WebApplicationContext与特定的servlet(或实例)无关,它与ServletContext相关,每个web应用程序(WAR)只有一个servlet上下文-这是由servlet容器保证的。但是,如果servlet容器在高负载下创建多个实例,则会产生冲突,它们要么有一个对singleton DispatcherServlet的引用(这不太可能),要么为每个容器servlet创建一个DispatcherServlet实例,除非每个DispatcherServlet afaik都有一个句柄(无法想象其他情况),并且如果每个DispatcherServlet都有一个处理程序,一定有很多spring应用程序上下文和handlersSeems一样,你没有仔细阅读我的回复。我并没有说每个SERVLET实例都有一个Spring ApplicationContext。我说过,每个WEB应用程序都有一个上下文,不管有多少个servlet实例,或者您定义了多少个不同的DispatcherServlet(您可以定义多个),实际上每个servlet实例都有一个Spring ApplicationContext(当然是在WEB应用程序中)。容器将请求委托给单例Servlet。当然,您可以定义多个Dispatcher,但我们讨论的是一个Dispatcher的实例,而不是定义3个Dispatcher……而且总是只有一个实例。这一说法与我所知道的有关Spring WebApplicationContext如何运行的所有内容都是相反的——您能否根据您所声称的内容提供一个源代码?如前所述,WebApplicationContext与特定的servlet(或实例)无关,它与ServletContext相关,每个web应用程序只有一个servlet上下文(WAR)——这是由servlet容器保证的。谢谢,我知道tomcat实例化了单例servlet实例,但我从未使用过其他任何东西