对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

上下文层次结构

DispatcherServlet期望WebApplicationContext(平原的延伸ApplicationContext) 获取其自己的配置。WebApplicationContext具有指向ServletContextServlet与之关联的。它还绑定到ServletContext,以便应用程序可以在RequestContextUtils要查找WebApplicationContext如果他们需要访问它。spring-doc.cadn.net.cn

对于许多应用程序,如果WebApplicationContext简单而足够。 也可以有一个上下文层次结构,其中有一个根WebApplicationContext在多个DispatcherServlet(或其他Servlet) 实例,每个实例具有 它自己的孩子WebApplicationContext配置。 看的附加功能ApplicationContext了解有关上下文层次结构功能的更多信息。spring-doc.cadn.net.cn

WebApplicationContext通常包含基础设施 Bean,例如数据存储库和 需要在多个Servlet实例。那些豆子 可以有效地继承,并且可以在特定于 Servlet 的 孩子WebApplicationContext,它通常包含给定Servlet. 下图显示了此关系:spring-doc.cadn.net.cn

MVC 上下文层次结构

以下示例将WebApplicationContext等级制度:spring-doc.cadn.net.cn

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class<?>[] { RootConfig.class };
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { App1Config.class };
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] { "/app1/*" };
	}
}
class MyWebAppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {

	override fun getRootConfigClasses(): Array<Class<*>> {
		return arrayOf(RootConfig::class.java)
	}

	override fun getServletConfigClasses(): Array<Class<*>> {
		return arrayOf(App1Config::class.java)
	}

	override fun getServletMappings(): Array<String> {
		return arrayOf("/app1/*")
	}
}
如果不需要应用程序上下文层次结构,则应用程序可以返回所有 配置getRootConfigClasses()nullgetServletConfigClasses().

以下示例显示了web.xml等效:spring-doc.cadn.net.cn

<web-app>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/root-context.xml</param-value>
	</context-param>

	<servlet>
		<servlet-name>app1</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/app1-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>app1</servlet-name>
		<url-pattern>/app1/*</url-pattern>
	</servlet-mapping>

</web-app>
如果不需要应用程序上下文层次结构,应用程序可以配置 “root” 上下文,并保留contextConfigLocationServlet 参数为空。