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:
![](https://cdn.codegym.cc/images/article/2b952611-7d0f-4670-bbbb-fc1cf92204b1/512.jpeg)
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