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

为什么原型作用域与状态bean一起使用?

程修雅
2023-03-14

Spring文档——根据经验,所有有状态bean都应该使用原型范围,而无状态bean应该使用单例范围。

因此,当您必须跨上下文一致地维护一些状态/数据时,有状态bean是必要的。说银行应用程序。您希望您的对象在各种操作(存款、取款等)中保持同步。

因此,在单例范围内,您会得到同样的事情——跨上下文的对象一致性。

那么,为什么javadoc会声明Opposite呢?

帮助!!:)

共有1个答案

广献
2023-03-14

这主要是由于在多线程环境中使用单例bean时需要保留实物的同步问题。使用原型bean,对bean的每个请求都会创建一个新的bean实例,因此您不需要关心跨线程同步访问bean的状态。但是在混合原型和单例bean时需要非常小心,因为原型bean只会连接到单例bean中一次。也就是说,它实际上变成了这个bean中的单例...

如果确实需要在单例bean中使用原型bean,那么应该使用查找方法注释。

大多数情况下,您不会遇到使用有状态bean的需要,因为状态是由单独的持久性层或直接由调用方本身提供的。

具有状态的单例bean的一个示例是缓存。通过使用专用的缓存库,例如infinispan、guava、hazlesast,...您不需要在这里太关心同步,因为这方面由这些库为您处理。

鉴于您的银行示例,您可能不想将事务详细信息存储在重点存储中,例如Java堆。如果您的应用程序因某种原因崩溃,所有这些信息都将不可恢复地丢失。此信息需要存储在持久存储中,例如数据库。

 类似资料:
  • 假设有两个类ClassA和ClassB。假设ClassB依赖于ClassA。在配置文件中,如果我们将ClassA的作用域定义为singleton,而将ClassB的作用域定义为Prototype,那么每次创建ClassA的bean实例时ClassB的实例会发生什么?每次返回ClassA实例时,会返回相同的ClassB实例还是创建新实例? 谢谢!!!

  • 我试图使用反应组件在我的 在下面的例子中,它在不使用状态的情况下工作得很好 https://jsbin.com/paduyarase/edit?html输出 现在我在我的组件中引入usestate。我编译了下面的函数,使用的是javascript,但它不起作用。 此组件不工作https://jsbin.com/hefiretaru/edit?html输出 获取错误 错误:缩小的反应错误#321;参

  • 问题内容: 我想知道我什么时候应该在Spring中准确使用范围?我了解,如果需要Bean,则返回相同的对象实例。 那我们为什么要考虑呢? 通过示例进行解释将有助于您理解其必要性。 问题答案: 要明确简单的定义: 原型范围=每次注入/查找新对象时都会创建一个。每次都会使用new 。 单例范围=每次注入/查找相同对象时,都会返回该对象。在这里它将实例化一个实例,然后每次返回它。 原型bean是在使用时

  • 问题内容: 我正在学习EJB3,只是好奇何时可以方便地使用SFSB?当SFSB确实可以轻松解决一些复杂问题时,我找不到任何很好的示例。 实际上,我看到SLSB可以用作Web服务,这很方便。但我不知道何时使用SFSB。我只看到它的问题,因为我们应该学习一些有关它的知识,我们应该编写由批注组成的代码,其内容要少于完全注释,我们应该使用烦人的查找方法……而我们得到的任何回报都没有。 例如,我们不能使用S

  • 我是JavaEE的新手,我试图找出无状态和有状态会话bean之间的区别。到目前为止我所理解的: 1.)在有状态会话bean中,bean的状态与客户机绑定;因此,只要我们与同一个用户在同一个会话中,就应该有相同的bean实例状态 2.)在无状态会话bean中,没有绑定到会话和客户机的状态;事实上,bean实例可以在用户的每次调用或请求中进行交换 为了尝试这一点,我编写了一个简短的servlet,它只

  • 我知道无状态会话bean指的是EJB bean,而请求范围bean指的是CDI bean(或JSF托管bean),所以我将从Java EE教程中给出它们的两个定义开始。 无状态会话bean定义: 无状态会话bean不维护与客户端的会话状态。当客户机调用无状态bean的方法时,该bean的实例变量可能包含特定于该客户机的状态,但仅限于调用期间。当方法完成时,客户端特定状态不应保留。 用户在单个HTT