单身有状态吗?

use*_*434 4 java singleton spring design-patterns

嗨,我在面试问题文件中得到了这个问题.

单身和原型(非单身)是有状态的,是无国籍的

我不确定原型是否是无状态的?这个问题有问题吗?

nic*_*ild 6

这个问题本身措辞不力.您可以在Singletons和Prototypes(实例)中拥有状态,因为它是合法代码,但在任何一种情况下您都不需要具有状态.自提到Spring之后,我将尝试回答有关使用Spring的问题.

就Spring bean范围而言,singleton将导致ApplicationContext创建单个实例并在所要求的bean的每个地方使用该实例. 每次要求bean时prototype都会导致ApplicationContext创建一个新实例.

它们都可以是有状态的.

  • 如果你没有在你的单身人物中保持状态单身人士的目的是什么? (10认同)

axt*_*avt 5

如果您将“无状态”理解为“没有会话状态”,即与特定客户端的会话相关的状态,那么这个问题看起来相当合法(尽管措辞不佳)。

在这些术语中,singleton作用域 bean 通常是无状态的,因为它们由多个客户端同时使用,并且它们的状态不是特定于客户端的。

相反,prototype作用域 bean 通常是在与特定客户端的对话上下文中创建的(尽管request有时session作用域可能更合适),因此它们的状态与这些对话相关(因为如果您的 bean 不需要保持任何对话状态,您可以将其设为singleton)。从这个意义上说,prototypebean 是有状态的。


Jac*_*nds 5

原型bean和Singleton bean都可以保持状态.但是,根据Spring文档,"您应该将原型范围用于所有有状态的bean,而单例范围应该用于无状态bean."