Spring MVC — WebApplicationContext. Описание интерфейса
В статье Spring MVC – основные понятия, архитектура была кратко описана архитектура фреймворка и диспетчера сервлетов DispatcherServlet. Ещё одним важным интерфейсом в спринг является WebApplicationContext, который работает с диспетчером сервлетов.
1. Общее описание WebApplicationContext
В определении WebApplicationContext сказано, что это интерфейс, который предоставляет конфигурацию для веб приложения. Он является read-only (т.е. его нельзя перезаписать) во время выполнения приложения, но может быть перезагружен, если это позволяет реализация.
Чтобы было понятнее какое место занимает этот интерфейс в общей конфигурации, возьмём официальную иллюстрацию spring:
Здесь видно, что WebApplicationContext содержит в себе Controllers, HandlerMapping, ViewResolver. Всё это интерфейсы, которые отвечают за контроллеры, поиск представлений и обработку запросов. Эти понятия более подробно будут рассмотрены в других статьях, но для общего понимания ещё раз приведу картинку из статьи, указанной в начале этого описания:
Т.е. вся правая часть как раз входит в WebApplicationContext.
2. Реализация интерфейса WebApplicationContext
По умолчанию главной реализацией этого интерфейса является класс XmlWebApplicationContext. Этот класс получает конфигурацию из XML документа, которая разбирается с помощью XmlBeanDefinitionReader.
По умолчанию, конфигурация должна находится в /WEB-INF/applicationContext.xml для родительского (рутового) контекста или в /WEB-INF/test-servlet.xml для контекста с пространством имён test-servlet (как для экземпляра DispatcherServlet с сервлетом с именем test).
Местонахождение конфигурации может быть переопределено с помощью параметра contextConfigLocation из ContextLoader и параметра сервлета init-param из FrameworkServlet.
3. Описание в web.xml
Если файлы конфигурации были созданы по умолчанию, то многие из вас замечали вот эти строчки в дескрипторе развертывания веб приложения web.xml:
1 2 3 4 5 6 7 |
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> |
Вот как раз здесь и извлекаются настройки для Spring MVC. ContextLoaderListener — это тот экземпляр, который загружает ваш WebApplicationContext, который по умолчанию использует класс XmlWebApplicationContext. А он в свою очередь разбирает настройки для корректной работы Spring.
Описание этого интерфейса может быть сложно для понимания с первого раза, но в процессе использования Spring станет более понятно. На старте изучения Spring может быть достаточно первых картинок в начале статьи, чтобы просто понимать общую архитектуру работы Spring контейнера.
Может быть интересно
Spring MVC — Handler Mapping. Описание интерфейса HandlerMapping
29