Con il rilascio della Servlet 3.0 spec è stato possibile configurare il Servlet Container con (quasi) senza xml. Per questo c'è lo ServletContainerInitializer
nelle specifiche Servlet. In questa classe puoi registrare filtri, listener, servlet, ecc. Come faresti tradizionalmente in uno web.xml
.
Spring fornisce un'implementazione SpringServletContainerInitializer
che sa come gestire le classi WebApplicationInitializer
. Spring fornisce anche un paio di classi base da estendere per semplificarti la vita, lo AbstractAnnotationConfigDispatcherServletInitializer
è uno di quelli. Registra a ContextLoaderlistener
a scelta (opzionale) e uno DispatcherServlet
e consente di aggiungere facilmente classi di configurazione da caricare per entrambe le classi e di applicare filtri a DispatcherServlet
e fornire il mapping servlet.
Il WebMvcConfigurerAdapter
è per la configurazione di Spring MVC, la sostituzione del file xml caricato da DispatcherServlet
per la configurazione di Spring MVC. Il WebMvcConfigurerAdapter
deve essere utilizzato per una classe @Configuration
.
@Configuration
@EnableWebMvc
public class WebConfiguration
extends WebMvcConfigurerAdapter implements WebApplicationInitializer
{ ... }
Non suggerirei di miscelare quelli in quanto sono fondamentalmente 2 preoccupazioni diverse. Il primo è per la configurazione del contenitore servlet, quest'ultimo per la configurazione di Spring MVC.
Si vorrebbe dividerli in 2 classi.
Per la configurazione.
@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter { ... }
Per il bootstrap dell'applicazione.
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[] {"/"};
}
}
Un ulteriore vantaggio è che è ora possibile utilizzare le classi di convenienza previste entro la primavera, invece di configurare manualmente il DispatcherServlet
e/o ContextLoaderListener
.
fonte
2014-10-31 14:20:34
Dividere la configurazione di distribuzione dalla configurazione del contesto. –