Spring如何同时为多个bean提供多个请求

时间:2016-12-16 07:52:54

标签: java spring servlets

对于Spring,如果我有两个同时访问单例bean的请求怎么办?一个请求是否必须等到另一个请求完成。 Spring容器如何为我的请求找到单例bean实例?

对于servlet,如果我有两个请求同时访问普通类的普通方法(没有静态没有其他复杂的东西)?一个请求是否必须等到另一个请求完成以避免并发(同时两个请求正在尝试访问同一类的对象)。 Web容器如何为我的请求找到实例?

1 个答案:

答案 0 :(得分:14)

  

对于Spring,如果我有两个访问singleton bean的请求怎么办?   同时?一个请求是否必须等到另一个请求   完成?

Spring容器为单例bean类创建一个且只有一个实例(比如Controller,Service类等)。 在Java中,有几种方法可以安全地为类创建单例实例,您可以查看here以获取更多信息。一旦Spring容器创建了单例实例,那么将使用控制器/服务类的单个实例来提供Web请求。

此外,没有问题(即,两者之间不会有任何等待),即使两个请求访问单例bean,因为它们将在两个单独的线程中提供,所有你需要确保的是你的控制器和服务类(即单例范围的bean)不携带/保持任何状态(即,它们是无状态的)并且是线程安全的

  

Spring容器如何找到我的单例bean实例   请求?

Spring容器根据您使用xml或通过注释提供的配置创建然后注入单例bean实例。

  

对于servlet,如果我有两个访问普通类的请求   正常方法(没有静态没有其他复杂的东西)同时?   一个请求是否必须等到另一个请求完成以避免   并发(同时两个请求试图访问   同类的对象)?

不,每个请求都将在一个单独的线程中处理,因此一个请求不会等待另一个请求被提供/完成,换句话说,请求将被并行提供/处理。这是通过使用/管理线程池来实现Web容器的。

  

Web容器如何查找我的请求的实例?

Web容器(如Tomcat等)创建并加载所有servlet类(如Spring' s DispatcherServlet或您自己的自定义servlet)然后一次Web请求来自客户端(如浏览器),它将根据web.xml中配置的url-pattern或通过注释处理到servlet。