【问题标题】:spring web application with two ServletContext具有两个 ServletContext 的 Spring Web 应用程序
【发布时间】:2015-10-14 05:41:09
【问题描述】:

我们可以有一个带有两个 ServletContext 的 spring 容器吗?我只是在问这个原因,我们在 spring 中有 Application 范围,它为每个 ServletContext 设置 bean 的范围。那么我们可以有两个这样的 bean 的实例吗?

【问题讨论】:

    标签: spring scope servlet-container


    【解决方案1】:

    如果您谈论的是特定于 Servlet 的 Spring 应用程序上下文,而不是来自 EE 的 ServletContext,那么是的,可以有它们的多个实例,因为您可以为每个 servlet 定义一个应用程序上下文(它们是子根应用程序上下文的上下文)。如果您在每个 servlet 上下文中定义了一个应用程序范围的 bean,那么每个 servlet 上下文都有一个实例,即您的应用程序中有多个实例。

    【讨论】:

      【解决方案2】:

      每个应用程序不能有多个 ServletContext(根据 JavaEE 定义)。

      解决方案 A) 将对象的范围更改为 prototype 并招募一些 bean 的实例。

      解决方案 B)(更好)为您的 bean 使用@Qualifier,这样您就可以为同一个类创建两个不同的 bean。如果您使用基于 xml 的配置,请为您的 bean 提供不同的名称。如果您使用基于类的配置,请使用@Bean(name = "name1")。将@Qualifier("name1")@Autowired 放在一起以检索所需的bean。

      【讨论】:

      • 我认为 OP 是在谈论 Spring 的 servlet 上下文,而不是 EE 的 ServletContext(这是另一回事)。
      • Spring 中没有 ServletContext 这样的东西。您指的可能是ApplicationContext
      • 是的,如您所见,我写的是“servlet context”而不是“ServletContext”。也许我可以写“servlet ApplicationContext”来说明清楚。
      猜你喜欢
      • 1970-01-01
      • 2014-02-12
      • 2011-01-06
      • 2019-07-29
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      相关资源
      最近更新 更多