Hola usuario de nuestra web, hallamos la respuesta a tu búsqueda, continúa leyendo y la encontrarás más abajo.
Solución:
Con el lanzamiento de la especificación Servlet 3.0, fue posible configurar su Contenedor de Servlet sin (casi) xml. Para esto existe la ServletContainerInitializer
en la especificación del Servlet. En esta clase puede registrar filtros, oyentes, servlets, etc. como lo haría tradicionalmente en un web.xml
.
Spring proporciona una implementación del SpringServletContainerInitializer
que sabe manejar WebApplicationInitializer
clases Spring también proporciona un par de clases base para extender y hacer su vida más fácil y la AbstractAnnotationConfigDispatcherServletInitializer
es uno de esos registra un ContextLoaderlistener
(opcionalmente) y un DispatcherServlet
y le permite agregar fácilmente clases de configuración para cargar ambas clases y aplicar filtros a la DispatcherServlet
y para proporcionar el mapeo de servlet.
El WebMvcConfigurerAdapter
es para configurar Spring MVC, el reemplazo del archivo xml cargado por el DispatcherServlet
para configurar Spring MVC. El WebMvcConfigurerAdapter
debe ser usado para un @Configuration
clase.
@Configuration
@EnableWebMvc
public class WebConfiguration
extends WebMvcConfigurerAdapter implements WebApplicationInitializer
...
No recomendaría mezclarlos ya que son básicamente 2 preocupaciones diferentes. El primero es para configurar el contenedor de servlets, el último para configurar Spring MVC.
Desearía dividirlos en 2 clases.
Para la configuración.
@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter ...
Para arrancar la aplicación.
public class MyWebApplicationInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer
protected Class>[] getRootConfigClasses()
return new Class[] RootConfig.class;
protected Class>[] getServletConfigClasses()
return new Class[] WebConfiguration .class;
protected String[] getServletMappings()
return new String[] "/";
Una ventaja adicional es que ahora puede usar las clases de conveniencia proporcionadas por Spring en lugar de configurar manualmente el DispatcherServlet
y/o ContextLoaderListener
.
Para comenzar desde el principio, vale la pena ver cómo comienza el contenedor de servlets.
- SpringServletContainerInitializer es arrancado automáticamente por cualquier contenedor Servlet 3.0.
- SpringServletContainerInitializer busca clases que implementen WebApplicationInitializer (enlace a spring.io; también bien descrito en “Spring In Action” 4.ª edición de Craig Walls, p.135).
Entonces, para comenzar, SpringServletContainerInitializer tiene que encontrar la clase correcta que implemente WebApplicationInitializerWebApplicationInitializer. Hay dos formas de hacerlo realidad:
- Una es implementando WebApplicationInitializer por sí solo; la interfaz se introdujo en Spring 3.1
- La segunda es extendiendo la clase AbstractAnnotationConfigDispatcherServletInitializer que también implementa WebApplicationInitializer. La clase se introdujo en Spring 3.2 por conveniencia y es “el enfoque preferido para las aplicaciones que usan la configuración de Spring basada en Java”. – ver el enlace. Le permite iniciar el contexto de la aplicación de servlet, así como el contexto de la aplicación raíz.
También me gustaría resaltar que WebMvcConfigurerAdapter que menciona no debe confundirse con WebApplicationInitializer. Como sugiere su nombre, tiene que ver con la configuración de “Mvc”. Es una clase de adaptador que implementa métodos vacíos de WebMvcConfigurer. Lo usa cuando configura su controlador Mvc con la anotación @EnableWebMvc.
Espero que esto ayude.