一尘不染

Spring-MVC:什么是“上下文”和“命名空间”?

spring-mvc

XmlWebApplicationContext
javadoc:

默认情况下,配置将从“ /WEB-INF/applicationContext.xml”获取根上下文,从“ /WEB-INF/test-
servlet.xml”获取具有名称空间“ test-servlet”的上下文(例如Servlet名称为“
test”的DispatcherServlet实例)。

Spring上下文是什么意思?

根上下文是什么?还有其他哪些Spring上下文?

什么是名称空间?

更新:

一些后续问题:

  1. 什么是Spring ApplicationContext-它是否包含保存在配置XML文件中定义的bean的“东西”?

  2. 查看ContextLoaderListener的代码,看起来它加载了在配置XML文件中定义的数据。但是我的Spring Web应用程序无需定义此侦听器或任何其他侦听器即可工作。怎么会这样?

  3. 在什么情况下,拥有多个Spring的DispatcherServlet实例有意义吗?

  4. 根上下文(来自applicationContext.xml的数据)是否适用于DispatcherServlet的每个实例,而其他上下文(例如,来自test-servlet.xml的数据)仅适用于相关的DispatcherServlet(即test)?


阅读 468

收藏
2020-06-01

共1个答案

一尘不染

“ Spring上下文” = Spring
ApplicationContext

就Web应用程序而言,“根上下文”是指Web应用程序加载和使用的主要上下文。通常,您将使用ContextLoaderListener启动根上下文。

根上下文实际上不是上下文的“一种”。它只是上下文所扮演的角色。Web应用程序中有一个根上下文。其他上下文不是根上下文。它们通常是根上下文的子级。

这里的命名空间是指Spring的DispatcherServlet实例的范围。就是说,如果您在web.xml中将servlet命名为“
test”,那么按照惯例,Spring将查找名为“ test-
servlet.xml”的文件用作该调度程序的上下文。顺便提及,为分派器创建的每个这样的上下文都成为根上下文的子级。

编辑: 要回答您的新问题:

  1. 跟随我答案第一行中的链接以了解ApplicationContext。如果您有未在此处回答的问题,建议您发布一个新的SO问题。
  2. 根上下文是可选的。如果您没有定义ContextLoaderListener,那么您就没有根上下文。当您使用DispatcherServlet时,它将启动自己的ApplicationContext,并从那里获取所需的bean。
  3. 我不知道一个人从头顶掉下来。我想如果您的应用程序中某些URL资源之间需要完全不同的配置,那可能会促使您这样做。
  4. 是。为了用适当的术语表述,根上下文是为DispatcherServlet启动的任何上下文的父上下文。可以通过子上下文访问父上下文中的Bean,但事实并非如此。
2020-06-01