根和子上下文在进一步阅读之前,请了解-
Spring一次可以有多个上下文。其中之一将是根上下文,而所有其他上下文将是子上下文。
所有子上下文都可以访问在根上下文中定义的Bean。但事实并非如此。根上下文无法访问子上下文Bean。
ApplicationContext:
applicationContext.xml是每个Web应用程序的根上下文配置。Spring加载applicationContext.xml文件并为整个应用程序创建ApplicationContext。每个Web应用程序只有一个应用程序上下文。如果没有使用contextConfigLocation参数在web.xml中明确声明上下文配置文件名,Spring将在WEB-INF文件夹下搜索applicationContext.xml,如果找不到该文件,则抛出FileNotFoundException。
ContextLoaderListener为根应用程序上下文执行实际的初始化工作。读取“ contextConfigLocation”上下文参数,并将其值传递给上下文实例,将其解析为可能由多个逗号和空格分隔的多个文件路径,例如“ WEB-INF / applicationContext1.xml,WEB-INF / applicationContext2.xml”。ContextLoaderListener是可选的。此处仅说明一点:您无需配置ContextLoaderListener即可启动Spring应用程序,而仅使用DispatcherServlet配置基本的最小web.xml。
DispatcherServlet DispatcherServlet本质上是Servlet(它扩展了HttpServlet),其主要目的是处理与配置的URL模式匹配的传入Web请求。它使用传入的URI并找到控制器和视图的正确组合。因此,它是前端控制器。
在春季配置中定义DispatcherServlet时,您可以使用contextConfigLocation属性为XML文件提供控制器类,视图映射等条目。
WebApplicationContext除ApplicationContext之外,单个Web应用程序中可以有多个WebApplicationContext。简单来说,每个DispatcherServlet与单个WebApplicationContext相关联。xxx-servlet.xml文件特定于DispatcherServlet,并且一个Web应用程序可以配置多个DispatcherServlet来处理请求。在这种情况下,每个DispatcherServlet都会配置一个单独的xxx-servlet.xml。但是,applicationContext.xml对于所有servlet配置文件都是通用的。默认情况下,Spring将从您的webapps WEB-INF文件夹中加载名为“ xxx-servlet.xml”的文件,其中xxx是web.xml中的servlet名称。如果要更改该文件名的名称或更改位置,请添加带有contextConfigLocation作为参数名称的initi-param。
它们之间的比较和关系:
ContextLoaderListener与DispatcherServlet
ContextLoaderListener创建根应用程序上下文。DispatcherServlet条目为每个Servlet条目创建一个子应用程序上下文。子上下文可以访问在根上下文中定义的bean。根上下文中的Bean无法(直接)访问子上下文中的Bean。所有上下文都添加到ServletContext中。您可以使用WebApplicationContextUtils类访问根上下文。
阅读了Spring文档之后,您将了解以下内容:
a)应用程序上下文是层次结构,WebApplicationContexts也是如此。请参阅此处的文档。
b)ContextLoaderListener为Web应用程序创建一个根Web应用程序上下文,并将其放在ServletContext中。无论在控制器层中使用哪种技术(Struts或Spring MVC),都可以使用此上下文加载和卸载Spring管理的bean。
c)DispatcherServlet创建自己的WebApplicationContext,并且处理程序/控制器/视图解析器由该上下文管理。
d)当ContextLoaderListener与DispatcherServlet一起使用时,首先创建一个根Web应用程序上下文,如先前所述,并且一个子上下文也由DispatcherSerlvet创建,并附加到根应用程序上下文。请参阅此处的文档。
当我们使用Spring MVC并在服务层中使用Spring时,我们提供了两个应用程序上下文。第一个使用ContextLoaderListener配置,另一个使用DispatcherServlet配置
通常,您将在DispatcherServlet上下文中定义所有与MVC相关的bean(控制器和视图等),并在ContextLoaderListener的根上下文中定义所有跨领域的bean,例如安全性,事务,服务等。
请参阅此以获取更多详细信息:https :
//siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html