【发布时间】:2015-10-14 05:41:09
【问题描述】:
我们可以有一个带有两个 ServletContext 的 spring 容器吗?我只是在问这个原因,我们在 spring 中有 Application 范围,它为每个 ServletContext 设置 bean 的范围。那么我们可以有两个这样的 bean 的实例吗?
【问题讨论】:
标签: spring scope servlet-container
我们可以有一个带有两个 ServletContext 的 spring 容器吗?我只是在问这个原因,我们在 spring 中有 Application 范围,它为每个 ServletContext 设置 bean 的范围。那么我们可以有两个这样的 bean 的实例吗?
【问题讨论】:
标签: spring scope servlet-container
如果您谈论的是特定于 Servlet 的 Spring 应用程序上下文,而不是来自 EE 的 ServletContext,那么是的,可以有它们的多个实例,因为您可以为每个 servlet 定义一个应用程序上下文(它们是子根应用程序上下文的上下文)。如果您在每个 servlet 上下文中定义了一个应用程序范围的 bean,那么每个 servlet 上下文都有一个实例,即您的应用程序中有多个实例。
【讨论】:
每个应用程序不能有多个 ServletContext(根据 JavaEE 定义)。
解决方案 A) 将对象的范围更改为 prototype 并招募一些 bean 的实例。
解决方案 B)(更好)为您的 bean 使用@Qualifier,这样您就可以为同一个类创建两个不同的 bean。如果您使用基于 xml 的配置,请为您的 bean 提供不同的名称。如果您使用基于类的配置,请使用@Bean(name = "name1")。将@Qualifier("name1") 和@Autowired 放在一起以检索所需的bean。
【讨论】:
ServletContext 这样的东西。您指的可能是ApplicationContext。