При использовании AbstractAnnotationConfigDispatcherservletinitializer и WebApplicationInitializer?
Я работаю с Spring 4.0.7
Я провел исследование о настройке Spring MVC через JavaConfig.
практически до вчерашнего дня я видел две конфигурации, используя эти два варианта
- расширяет AbstractAnnotationConfigDispatcherservletinitializer
- расширяет WebMvcConfigurerAdapter и реализует WebApplicationInitializer
Примечание: (2) два класса, один для дополнения и другое для реализации
Я использую (2), потому что я нашел много примеров, где я могу настроить преобразователи, форматеры, обработчики ресурсов и т. д....
но в последние дни я попытался помочь вопросу о StackOverflow, и я понял, что (1) существует.. Я сделал некоторый обзор в Google о (1) и существует несколько примеров работы с (1)
мой вопрос в том, как описывается название этого поста.
Спасибо
2 ответов
С выпуском спецификации Servlet 3.0 появилась возможность настроить контейнер сервлета (почти) без xml. Для этого есть ServletContainerInitializer
в спецификации сервлетов. В этом классе вы можете зарегистрировать фильтры, слушателей, сервлеты и т. д. как вы традиционно делаете в web.xml
.
Весна обеспечивает реализацию SpringServletContainerInitializer
который знает, как обращаться WebApplicationInitializer
классы. Весна также обеспечивает пару базовых классов, чтобы расширить, чтобы сделать вашу жизнь проще AbstractAnnotationConfigDispatcherServletInitializer
это одна из них. Он регистрирует
а ContextLoaderlistener
(опционально) и DispatcherServlet
и позволяет легко добавлять классы конфигурации для загрузки для обоих классов и применять фильтры к DispatcherServlet
и предоставить сопоставление сервлетов.
на WebMvcConfigurerAdapter
предназначен для настройки Spring MVC, замены xml-файла, загруженного DispatcherServlet
для настройки Spring MVC. The WebMvcConfigurerAdapter
использовать @Configuration
класс.
@Configuration
@EnableWebMvc
public class WebConfiguration
extends WebMvcConfigurerAdapter implements WebApplicationInitializer
{ ... }
я бы не рекомендовал смешивать их, поскольку они в основном 2 разные проблемы. Первый предназначен для настройки контейнера сервлетов, последний-для настройки 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[] {"/"};
}
}
дополнительным преимуществом является то, что теперь вы можете использовать удобные классы вместо весны ручной настройки DispatcherServlet
и/или ContextLoaderListener
.
чтобы начать с самого начала, стоит посмотреть, как запускается контейнер сервлетов.
- SpringServletContainerInitializer автоматически загружается любым контейнером сервлета 3.0.
- SpringServletContainerInitializer ищет классы, реализующие WebApplicationInitializer (ссылка на весна.Ио; также хорошо describeed в"Весна В Действиях" 4-е издание, Крейг стен, С. 135).
Итак, чтобы начать-SpringServletContainerInitializer должен найти правильный класс, реализующий WebApplicationInitializer. Есть два способа сделать так, чтобы это произошло:--1-->
- реализуя WebApplicationInitializer самостоятельно; интерфейс был введен весной 3.1
- второй-путем расширения AbstractAnnotationConfigDispatcherservletinitializer класс, который реализует WebApplicationInitializer. Класс был представлен весной 3.2 для удобства, и это " предпочтительный подход для приложений, которые используют конфигурацию Spring на основе Java."- см. ссылку. Это позволяет запускать контекст приложения сервлета, а также корневой контекст приложения.
Я также хотел бы higlight, что WebMvcConfigurerAdapter вы упомянули, не следует путать с WebApplicationInitializer. Как следует из названия - это связано с настройка "Mvc". Это класс адаптера, который реализует пустые методы из WebMvcConfigurer. Вы используете его при настройке контроллера Mvc с помощью @EnableWebMvc Примечание.
надеюсь, что это помогает.