DispatcherServlet espera un WebApplicationContext (una extensión del ApplicationContext normal) para su propia configuración. El WebApplicationContext tiene una referencia al ServletContext y al Servlet al que está asociado. También está vinculado al ServletContext para que las aplicaciones puedan usar los métodos estáticos RequestContextUtils para encontrar el WebApplicationContext si necesitan acceder a él.
Para muchas aplicaciones, es suficiente tener un WebApplicationContext. También es posible tener una jerarquía de contextos en los que un WebApplicationContext raíz sea compartido por múltiples instancias de DispatcherServlet (u otros Servlet), cada una con su propia configuración secundaria WebApplicationContext.
La raíz WebApplicationContext normalmente contiene beans de infraestructura, como almacenes de datos y servicios empresariales, que deben compartirse entre varias instancias de Servlet. Estos beans se heredan efectivamente y se pueden anular (es decir, volver a declarar) en un hijo WebApplicationContext específico del servlet, que generalmente contiene beans locales para ese Servlet. La siguiente imagen muestra esta relación:
El siguiente ejemplo configura la jerarquía WebApplicationContext:
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() y
null de
getServletConfigClasses().
El siguiente ejemplo muestra el equivalente de web.xml:
<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>
contextConfigLocation vacío .
GO TO FULL VERSION