Saltar al contenido

¿Cuándo se usa AbstractAnnotationConfigDispatcherServletInitializer y WebApplicationInitializer?

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:

  1. Una es implementando WebApplicationInitializer por sí solo; la interfaz se introdujo en Spring 3.1
  2. 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.

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *