为什么我们会在春天使用自定义范围?什么时候需要?

时间:2011-05-27 18:35:15

标签: java spring scope thread-local

任何人都可以帮助我理解自定义范围。我通过手册和许多在线示例,了解它是如何实现的。但是,我仍然不清楚为什么我们需要一个自定义代理,以及我们为什么会这样做,限制bean的范围。

正如我所知,对于单身人士 - 当我们想要将单个bean提供给所有参考文献时,我们使用单身人士。当我们希望每次引用bean时都要给出一个新的引用时,我们使用原型。

现在我对自定义范围的理解是 自定义范围 - 我们使用自定义范围作为两者之间的中间点,我们既不想传递单个引用也不是每次都有新引用。但是它更接近于我们传递相同bean的singleton每次,只是从我们的首选位置(例如底层的threadlocal或地图)。

请帮助我明确我的概念..这里的主要问题是为什么要自定义范围?什么时候需要?

2 个答案:

答案 0 :(得分:4)

在不同的背景下。例如 - 在Web应用程序中。在那里定义了两个范围 - “请求”和“会话”。但是,这些有时是不够的。通常需要一个“闪存”范围(持续一个请求和随后的重定向)或“会话”范围(持续一系列请求形成对话)。

在此类情况和类似情况下,使用自定义范围。

答案 1 :(得分:3)

这实际上取决于手头的问题。例如,您可能希望创建特定bean的预定义数量的实例,但不能超过该实例。因此,在满足此数量之前,您将继续创建新实例,但是一旦满足该数量,您将以平衡方式返回现有实例。

这可以应用于实例占用大量资源(例如内存)但在使用新实例时加速应用程序的问题。因此,您可以在需要时创建可行数量的新对象,并在实例数量超出该数量时委托现有对象(影响性能而非资源利用率)。