在Spring MVC中,有两种情况。一个是由ContextLoaderListener
启动的应用程序上下文或全局上下文。它采用contextConfigLocation
参数中提到的所有配置文件。
现在,如果您正在使用Spring MVC,则需要Dispatcher servlet,它会启动另一个容器,也称为Web应用程序容器。此容器将全局容器作为父容器。
将struts1与spring集成时,只有一个上下文。为什么spring mvc需要两个?使用spring mvc时是否可以只使用一个上下文?
谢谢!
答案 0 :(得分:15)
拥有根Web应用程序上下文和子servlet上下文只是一个选项。如果您知道您的应用程序没有第二个servlet,那么为整个Web应用程序提供一个Spring上下文就更简单了。
您可以通过从ContextLoaderListener
中删除contextConfigLocation
(以及随附的web.xml
context-param)并将所有bean定义移动到定义servlet上下文的xml中来实现该设置( [servlet-name]-servlet.xml
)。
这是可能的,因为FrameworkServlet
(DispatcherServlet
的超类)在创建servlet上下文时不关心是否存在根应用程序上下文。它只是将根上下文作为父级传递(如果可用)。请参阅related code here。
答案 1 :(得分:12)
想象一下,你有两个独立的Dispatchers,每个Dispatchers都有不同的用途,每个都有自己的依赖关系。您可以使用单独的上下文独立配置它们。
如果有任何共享配置,则可以进入“全局”上下文。
我不认为使用DispatcherServlet只能有一个上下文,因为它创建自己的上下文并将其链接到父上下文(通过FrameworkServlet超类)。
答案 2 :(得分:5)
检查此答案About multiple containers in spring framework
是的,您只能有一个上下文。
对于代码重用,最好在Application Context中隔离服务而不是WebApplicationContext。但这不是强制性的。你只能保留webApplicationcontext。