代码之家  ›  专栏  ›  技术社区  ›  questzen

跨多个应用程序上下文的Spring单例bean

  •  3
  • questzen  · 技术社区  · 16 年前

    我们有一个弹簧应用(单螺纹设计)。我们想让它适应多线程。其中一个想法是创建一个父线程并生成不同的线程,这些线程将实例化自己的应用程序上下文并并行运行。(到目前为止,内存和CPU不是一个问题)。我不知道单件是如何在春天实现的。Spring是使用静态引用并返回它,还是使用某种类型的缓存/映射(非静态/非单例和上下文特定的)进行查找?这将帮助我决定是否更改配置XML。有什么想法吗?

    3 回复  |  直到 16 年前
        1
  •  6
  •   axtavt    16 年前

    春天 singleton 每个应用程序上下文实例化一次bean。也就是说,如果您从同一个配置创建许多应用程序上下文,它们将具有不同的单例bean实例。

    如果您希望它们共享一个单实例bean,那么您可以在父应用程序上下文中声明它,并在创建它们时为您的多个上下文提供该父上下文。

        2
  •  2
  •   Bozho    16 年前

    为什么需要多个应用程序上下文才能使应用程序多线程?多个线程可以完美地使用同一上下文。

    更新: Take a look at spring batch

        3
  •  1
  •   Peter    16 年前

    在我看来,您真的需要看看您的单线程bean实际上在做什么,以及它们在多线程环境中的功能。我不会尝试更新您的应用程序上下文以适合您的线程模型,而是根据bean的生命周期进行适当的更新。

    • 如果它们真的是单线程的,并且本质上是线程安全的,那么只需像多线程那样使用它们。
    • 如果它们不是线程安全的,那么在新的多线程实现中,它们是否应该继续是Spring单例呢?将它们更新为每个线程实例化的非单例bean,然后尝试将整个应用程序上下文绑定到特定的线程,这可能更有意义。