Где контекст Spring инициализируется для Spring MVC, когда мы переключаемся на java конфигурацию на основе? - PullRequest
0 голосов
/ 18 января 2020

В настоящее время я следую некоторым учебникам, чтобы попытаться узнать больше о Spring для будущей стажировки, сейчас я смотрю на Spring MVC.

Проект, над которым я работал, основан на xml Конфигурация изначально. Мое предположение о том, как инициализируется Spring, было следующим:

  1. Tomcat читает мой web.xml файл (знает имя файла и находится в известном месте)
  2. Поэтому создает сервлет это экземпляр DispatcherServlet
  3. DispatcherServlet запускает пружину (знает имя файла конфигурации в соответствии с соглашением об именах)

Теперь я изменил приложение на избавиться от файлов xml полностью. Конфигурация теперь происходит в определенном мною классе SpringConfigFile с аннотацией @Configuration, @ComponentScan et c.

У меня также есть созданный мною класс WebInitializer, расширяющий AbstractAnnotationConfigDispatcherServletInitializer, который кажется, что отвечает за создание DispatcherServlet, я реализовал абстрактные методы, которые, кажется, отвечают за идентификацию класса конфигурации и отображений сервлета et c. Поэтому я думаю , что создание этого класса создает DispatcherServlet, который, в свою очередь (прямо или косвенно), создает контекст приложения.

Но меня смущает то, где находится экземпляр WebInitializer создано? Откуда это все началось? В конфигурации на основе xml вы можете более четко следить за тем, как инициализируется приложение: tomcat ищет в фиксированном месте файл xml, который, как он знает, должен существовать, создает экземпляр объекта из найденной там информации, которая запускает Spring. 1026 *

Но как это работает без этих xml файлов? Я могу назвать свой класс WebInitializer как угодно и поместить его в любую нужную мне упаковку? Tomcat просто ищет везде что-то расширяющее AbstractAnnotationConfigDispatcherServletInitializer?

1 Ответ

1 голос
/ 18 января 2020

Найдена информация, которую я искал.

Любой экземпляр, который реализует WebApplicationInitializer, автоматически обнаруживается SpringServletContainerInitializer, который сам загружается любым контейнером сервлета 3.0.

AbstractAnnotationConfigDispatcherServletInitializer реализует WebApplicationInitializer, поэтому автоматически определяется.

Более подробная информация здесь:

WebApplicationInitializer

Механизм начальной загрузки

...