当前位置: 首页 > 知识库问答 >
问题:

了解Web应用程序中的Spring bean范围

竺国兴
2023-03-14

根据springsource文档,singletonscoped bean在每个
容器中只实例化一次。例如,我有一个单例作用域的<code>UserDetails<code>bean,它包含有关用户的信息<br>
在我的main()方法中:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});  
UserDetails ud1 = (UserDetails)context.getBean("userDetails");  
custA.setAddress("Address set by ud1");  
System.out.println("Address : " + ud1.getAddress());  

UserDetails ud2 = (UserDetails)context.getBean("userDetails");  
System.out.println("Address : " + ud2.getAddress());

输出将是

Address set by ud1  
Address set by ud1

因为userDetails是一个单独的bean,所以< code>ud2的第二次检索将给出与ud1相同的结果。

现在这是我的问题:
对于我的Web应用程序,我在我的dispatcher-servlet.xml.中有以下用户详细信息bean

<bean id="userDetails" class="com.mukund.DTO.UserDetails" />  

第一个问题:单例作用域是否也是 Web 应用程序的默认作用域?
如果是:
此 Bean 会自动连接到帐户服务和客户服务类。
如果客户端说 clientA 已在客户服务类中将用户的名字设置为“用户 A”,并且一段时间后它从帐户服务类中检索到第一个名称,

第二个问题:它得到的是以“UserA”作为名字的UserDetails的同一个实例吗?< br >第三个问题:同时,如果另一个客户端(比如< code>clientB)试图获取AccountService类中的第一个名称,它会获取“UserA”吗?< br >第四个问题:clientA、clientB和其他人会共享同一个UserDetails实例吗?如果是:选择原型、请求或会话的范围。

我希望你能理解我的观点。请向我解释有关web应用程序的SpringBean作用域。

谢啦

共有2个答案

上官斌
2023-03-14

默认情况下,spring beans的作用域是singleton,这意味着每个容器有一个实例。但这并不意味着所有请求都使用同一个实例。

它的工作原理是这样的。

客户端A请求bean A,容器将查找该bean A的实例,如果实例不可用,它将创建一个实例,然后将其提供给客户端A。

但是,如果豆A被另一个客户端B使用,那么客户端A必须等到客户端B释放豆A。

麻超
2023-03-14

是的,单例是Web应用程序的默认范围。因此,您可以在所有服务(以及所有用户)中获得相同的UserMore实例。

什么样的范围适合你取决于你到底想要什么。您真的想将数据传输对象注入到服务中吗?对象应该存在多久?

    < li >原型范围:每个服务都有自己的UserDetails对象 < li >请求范围:请求时获得相同的实例 < li >会话范围:只要您在同一个会话中,就会获得相同的实例。
 类似资料:
  • 问题内容: 是否在同一Web应用程序的实例之间共享Java静态变量? 如果Web应用程序使用 MyClass 并且该应用程序的多个实例在Web服务器上运行, myStaticObject 是否被 多次 初始化? 问题答案: 通常,是的。大多数容器将为每个Web应用程序提供单独的类加载器。当多个应用程序使用该类时,这将导致该类被多次加载,从而导致该静态变量的多个实例。 陈述Java语言规范以供参考:

  • 问题内容: 场景:我们有一个在Websphere中运行的Spring托管的Web应用程序。(Spring 3.0.x,WAS 7)Webapp通过Spring的Web应用程序利用Websphere的工作管理器(配置为10的线程池)以执行计算密集型db读取操作。因此,基本上,有一个请求来生成10个不同的文件。要生成文档,只需db读取即可收集/处理数据。因此,我们基本上产生了10个线程来处理10个文档

  • 本章将教您如何使用Maven管理基于Web的项目。 在这里,您将学习如何创建/构建/部署和运行Web应用程序。 创建Web应用程序 要创建一个简单的Java Web应用程序,我们将使用maven-archetype-webapp插件。 所以,让我们打开命令控制台,转到C:\MVN目录并执行以下mvn命令。 C:\MVN>mvn archetype:generate -DgroupId = com

  • 我在web中配置了spring根web上下文。xml文件。我也有几个与此父项相关的子上下文。所有子上下文都是手动创建的: 我想在这个子上下文中管理会话和请求范围的bean。 如何正确创建和配置子上下文,使其能够处理web应用程序范围? 现在我在尝试自动装配会话范围的bean时出现以下错误(显然):

  • 问题内容: 我是Java的新手,我正尝试使用Firebase托管Java Web应用程序。 问题 我的问题似乎是我的文件不存在于我的Java文件结构中。因此,我不能在文件中“指向它” 。 题 关于如何托管Java Web应用程序,我不了解什么? 部署Java Web应用程序时是否有文件(Firebase显然需要)? 如何成功托管Java Web应用程序? Firebase托管设置说明: 设置与安装

  • 问题内容: 与在内置的Web服务器上运行独立的Java应用程序并在反向代理后面运行相比,构建一个小型的Java Web应用程序以在Servlet容器(如Tomcat)中运行的优势是什么? 我已经使用Java大约一年了。我注意到启动Tomcat需要时间,并且由于类加载器问题,并非总是可以进行热重新部署。Servlet API在我看来有些令人费解,尤其是从配置和RESTful设计的角度来看(实际上并没