Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring单例bean如何用于无状态对话?_Java_Spring_Scope - Fatal编程技术网

Java spring单例bean如何用于无状态对话?

Java spring单例bean如何用于无状态对话?,java,spring,scope,Java,Spring,Scope,大家早上好。今天早上,当我阅读《春季参考指南》时,我遇到了以下陈述 As a rule, use the prototype scope for all stateful beans and the singleton scope for stateless beans. 当bean范围为“prototype”时,getBean(…)将始终返回一个新实例化的对象。那么,我们如何实现有状态特性呢?我怎样才能保持这里的对话 类似地,每个容器只创建一次“singleton”。因此,在多次请求时,它会

大家早上好。今天早上,当我阅读《春季参考指南》时,我遇到了以下陈述

As a rule, use the prototype scope for all stateful beans and the singleton
scope for stateless beans.
当bean范围为“prototype”时,getBean(…)将始终返回一个新实例化的对象。那么,我们如何实现有状态特性呢?我怎样才能保持这里的对话


类似地,每个容器只创建一次“singleton”。因此,在多次请求时,它会保存同一组数据(如果我们说得更准确,我指的是最后一个状态)。那么,关于spring参考文档中的上述语句,我们做了些什么呢。我很困惑。请帮我理解这句话好吗?我可能有一个错误的理解。

在我们的CRUD应用程序中,SpringDAO是一个单例。也就是说,只有jdbc模板初始化是类级变量。另一个逻辑是方法调用的全部部分。因此,实际上,状态是堆栈框架的一部分,而不是堆,因此它是线程安全的。

这样想:

假设您有一个bean(例如服务),它通过一些私有字段保存复杂调用(可能还有对服务使用的其他组件的调用)的状态。如果对该bean/服务同时发生两个调用,则状态会受到影响,因为成员字段无法处理两个同时调用的状态。如果您想同时保存两个调用的状态,您可能需要将状态存储在密钥所在的某种映射中,例如线程id

但是,如果使用原型bean,则会为每个请求/调用创建一个新bean(示例中的服务),并且状态可以安全地存储在bean的私有字段中,因为bean不会在不同的请求之间共享

请注意,如果您希望在多个请求之间保持状态(如会话状态或类似),那么方法可能是将状态保存在某种状态存储中(例如带有映射的单例bean,或者更好的是基于EhCache的缓存)