Spring-MVC:什么是“上下文”和“命名空间”?
从XmlWebApplicationContext javadoc:
默认情况下,configuration将取自“/WEB-INF/applicationContext.xml”作为根上下文,“/WEB-INF/test-servlet.xml”作为命名空间为“test-servlet”的上下文(例如对于servlet名称为“test”的DispatcherServlet实例)。
这是什么意思一个spring的情况?
什么是根环境? 还有什么其他types的spring吗?
什么是命名空间?
更新:
一些后续问题:
-
什么是Spring ApplicationContext – 它是否包含在configurationXML文件中定义的Bean的“事情”?
-
看着ContextLoaderListener的代码,它看起来像加载configurationXML文件中定义的数据。 但是我的Spring web应用程序没有定义这个监听器或任何其他监听器。 怎么会这样?
-
Spring的DispatcherServlet有多个实例,在哪些情况下有意义?
-
根上下文(来自applicationContext.xml的数据)适用于DispatcherServlet的每个实例,而其他上下文(例如来自test-servlet.xml的数据)仅适用于相关的DispatcherServlet(即testing)?
“Spring context”=一个Spring ApplicationContext 。
就Web应用程序而言,“根上下文”是指Web应用程序加载和使用的主要上下文。 通常,您将使用ContextLoaderListener启动根上下文。
根上下文并不是真正的“上下文”。 这只是一个场景所起的作用。 你有一个web应用程序的根上下文。 其他上下文不是根上下文。 他们通常是根环境下的孩子。
这里的命名空间是指Spring的DispatcherServlet实例的范围。 所有的说法正确的是,如果你在你的web.xml中命名servlet“test”,那么按照约定,Spring会查找一个名为“test-servlet.xml”的文件作为调度器的上下文。 顺便说一下,为调度程序创build的每个上下文都成为根上下文的子节点。
编辑:要回答你的新问题:
- 按照我的答案的第一行中的链接了解ApplicationContext。 如果你有问题没有回答那里,我会build议张贴一个新的SO问题。
- 根上下文是可选的。 如果您没有定义ContextLoaderListener,那么您只是没有根上下文。 当你使用DispatcherServlet的时候,它会启动自己的ApplicationContext,并从那里获取它需要的bean。
- 我不知道我头上有一个。 我猜想,如果您的应用程序中某些URL资源之间需要有大不相同的configuration,那么可能会促使您这样做。
- 是。 为了用适当的术语说明,根上下文是为DispatcherServlet启动的任何上下文的父上下文。 在父上下文中的bean可以通过subprocess访问,但是反过来却是不正确的。
在一个Web应用程序中,体系结构通常分为像stream行的MVC结构一样的层。 所以一个Web应用程序基本上包含一个处理客户端请求的层,即HTTPRequests和一个为这些请求提供服务的层。
总结一下:用于处理Http请求的类,即映射到URL的控制器来自test-servlet.xml。 这被称为WebapplicationContext,仅包含主要用于处理客户端请求的bean。
现在下一部分是包含您的业务逻辑的Service / Dao层。 执行这种逻辑的Bean被加载到ApplicationContext对象下。
现在你可能会问为什么他们把这些东西分成文件或两个不同的对象。
因为,一个应用程序具有相同的业务逻辑,可以由不同协议的多个客户端使用。 您可以使用相同的服务层来处理RMI以及HTTP调用。 所以Spring创build了一个以ApplicationContext开头的父上下文。 然后,如果您的应用程序处理Web请求,则可以创build一个具有自己的WebApplicationContext并作为父上下文的子项初始化的dispathcher servlet。 所以所有的父类bean都可以在子类中被引用,并且可以被覆盖而不是相反
- ApplicationContextAware在Spring中如何工作?
- Spring @ContextConfiguration如何把xml的正确位置
- 弹簧安全Wild / Undertow:执行filter链时出错
- Spring Controller中的Init方法(注释版本)
- 无法findXML模式命名空间的Spring NamespaceHandler
- Spring @Autowired如何工作
- 是否有可能在我的applicationContext中有多个PropertyPlaceHolderConfigurer?
- dynamicWeb模块3.0 – 3.1
- Tomcat和Spring Web – 找不到类Exception org.springframework.web.context.ContextLoaderListener