Spring 中无状态和有状态 Bean 的类似物

mak*_*aks 2 spring ejb-3.1

Spring bean 有 2 种类型的作用域(如果不考虑 web 作用域):singleton,这是默认的,以及prototype. 粗略地说,他们在上下文中实现了单例和原型设计模式。

因此,如果 bean 具有原型作用域,它就可以像 EJB 中的有状态 bean 一样保持唯一的状态。当 bean 的范围是单例时,容器将仅创建它的一个实例。因此我们可以说 EJB 3.1 中的单例 Bean 类似于 Spring 中的单例 Bean。

但是如何在 Spring 中获得无状态 bean 的功能(我指的是 EJB 容器中的无状态 bean 池,并且每个线程都有一个唯一的无状态 bean 实例)?

JB *_*zet 5

您可以使 bean 成为线程安全的,并且单例 bean 就可以(这是大多数情况)。

或者你不能,你就必须使用原型。我发现 Spring 原型 bean 和无状态 EJB 会话 bean 之间的区别在于无状态会话 bean 是池化的。但在当今时代,每次将它们集中起来或创建一个新实例并不会产生太大的区别。每次创建一个新实例甚至可能有助于 GC。

  • 池还可以通过将池设置为适当的大小来帮助自动限制资源。此外,bean 实例*可能*很便宜,但其关联资源可能并不便宜。此外,通过使用代理+池模式,注入许多“bean”变得非常便宜,即使它们最终没有被使用也没有问题。由于无状态 bean 的代理类似于指向池的 URL。 (3认同)