为什么Spring MVC至少需要两个上下文?

2022-09-02 01:09:56

在Spring MVC中,有两个上下文。一种是由 启动的应用程序上下文或全局上下文。它采用参数中提到的所有配置文件。ContextLoaderListenercontextConfigLocation

现在,如果您也使用Spring MVC,则需要Dispatcher servlet,这将启动另一个容器,也称为Web应用程序容器。此容器将全局容器作为父容器。

将 struts1 与 spring 集成时,只有一个上下文。为什么春季mvc需要两个?使用弹簧 mvc 时,是否可以只使用一个上下文?

谢谢!


答案 1

拥有根 Web 应用程序上下文和子 servlet 上下文只是一种选择。如果您知道您的应用程序不会有第二个 servlet,那么为整个 Web 应用程序使用一个 Spring 上下文可以说是更简单的。

您可以通过简单地从中删除(以及随附的上下文参数)并将所有Bean定义移动到定义servlet上下文的xml中来实现该设置()。ContextLoaderListenercontextConfigLocationweb.xml[servlet-name]-servlet.xml

这是可能的,因为在创建 servlet 上下文时,(超类 )并不关心是否存在根应用程序上下文。如果可用,它只是将根上下文中继为父上下文。请参阅此处的相关代码FrameworkServletDispatcherServlet


答案 2

想象一下,您有两个独立的调度程序,每个调度程序都有不同的用途,并且每个调度程序都有自己的依赖项。您将使用单独的上下文独立配置这些内容。

如果有任何共享配置,则可以进入“全局”上下文。

我不认为使用DispatcherServlet只有一个上下文是可能的,因为它创建自己的上下文并将其链接到父上下文(通过FrameworkServlet超类)。

FrameworkServlet.createWebApplicationContext


推荐