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

时间:2010-02-11 18:21:28

标签: java multithreading spring

我们有一个spring应用程序(单线程设计)。我们希望将其改编为多线程。一个想法是创建一个父线程并生成不同的线程,这些线程将实例化他们自己的应用程序上下文并并行运行。 (目前,内存和CPU并不是一个问题)。我不确定春天是如何实现单身人士的。 Spring是否使用静态引用并返回此内容或使用某种缓存/映射(非静态/非单例和特定于上下文)进行查找?这将帮助我决定是否更改config-xml。请任何想法。

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

为什么需要多个应用程序上下文才能使应用程序成为多线程?多个线程可以很好地使用相同的上下文。

更新:Take a look at spring batch

答案 2 :(得分:1)

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

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