С выпуском Servlet 3.0 спецификации появилась возможность настроить свой контейнер сервлетов с (почти) не XML. Для этого есть ServletContainerInitializer
в спецификации Servlet. В этом классе вы можете регистрировать фильтры, прослушиватели, сервлеты и т. Д., Как вы обычно делали бы в web.xml
.
Весна обеспечивает реализацию SpringServletContainerInitializer
, которая умеет обрабатывать классы WebApplicationInitializer
. Spring также предоставляет пару базовых классов, чтобы расширить вашу жизнь. AbstractAnnotationConfigDispatcherServletInitializer
является одним из них. Он регистрирует a ContextLoaderlistener
(необязательно) и DispatcherServlet
и позволяет легко добавлять классы конфигурации для загрузки для обоих классов и применять фильтры к DispatcherServlet
и предоставлять отображение сервлета.
WebMvcConfigurerAdapter
предназначен для настройки Spring MVC, замены файла xml, загруженного DispatcherServlet
для настройки Spring MVC. WebMvcConfigurerAdapter
следует использовать для класса @Configuration
.
@Configuration
@EnableWebMvc
public class WebConfiguration
extends WebMvcConfigurerAdapter implements WebApplicationInitializer
{ ... }
Я бы не рекомендовал смешивать их, поскольку они в основном представляют собой две различные проблемы. Первый - для настройки контейнера сервлета, последний для настройки Spring MVC.
Вы хотели бы разбить их на 2 класса.
Для конфигурации.
@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter { ... }
Для начальной загрузки приложения.
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[] {"/"};
}
}
Дополнительным преимуществом является то, что теперь вы можете использовать классы удобства, предоставляемые Spring вместо ручной настройки DispatcherServlet
и/или ContextLoaderListener
.
Разделите конфигурацию развертывания из конфигурации контекста. –