一尘不染

Spring-MVC:什么是“context”和“namespace”?

spring

从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)?


阅读 378

收藏
2020-04-17

共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-04-17