【问题标题】:Why would we use custom scope in spring? When is it needed?为什么我们要在 spring 中使用自定义范围?什么时候需要?
【发布时间】:2011-09-03 14:55:32
【问题描述】:

谁能帮我理解自定义范围。我浏览了手册和许多在线示例,并了解了它是如何实现的。但是,我仍然不清楚为什么我们需要一个自定义代理,以及为什么我们会去限制 bean 的范围。

据我所知,对于单例,当我们希望将单个 bean 提供给所有引用时,我们使用单例,而当我们希望每次引用 bean 时都给出新的引用时,我们使用原型。

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

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

【问题讨论】:

    标签: java spring scope thread-local


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 @Bozho 用 apt 示例解释问题,但我是 Java EE 的新手,只有 spring 参考手册作为我的 spring 信息来源。您能否建议一些好的链接/参考文档/书籍以获取这些范围的详细示例。
    • 根据 Yohan 给出的答案,我的理解是“我们使用自定义范围来解决性能问题(在应用程序上下文中)”和关于 Web 上下文 - 用于维护会话特定的详细信息(每个会话的范围) ,用于处理与单个请求(每个请求的范围)相关的信息,并且按照您在回答中提到的那样创建 flash 和对话
    • spring 文档应该足够了。
    【解决方案2】:

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

    这可能适用于实例占用大量资源(例如内存)但在使用新实例时会加快应用程序的问题。因此,您可以在需要时创建可行数量的新对象,并在实例数量超过该数量时委托给现有对象(在资源利用率方面牺牲性能)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 2016-03-12
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多