В чем разница между контекстом приложения и контекстом веб-приложения?
Я в курсе, что WebApplicationContext
используется для приложений, ориентированных на архитектуру Spring MVC?
Я хочу знать, какая польза от ApplicationContext
приложений MVC? И какие бобы определены в ApplicationContext
?
spring
spring-mvc
applicationcontext
Сумит Трехан
источник
источник
web.xml
файла; этот вопрос задает о некоторых классах Spring.web.xml
но он говорит о вариантах конфигурации bean-компонентов Spring XMLApplicationContext
иWebApplicationContext
. Все определения bean вapplicationContext.xml
будут доступны в тоApplicationContext
время как все определения bean в*-servlet.xml
будут доступны в aWebApplicationContext
.Ответы:
Контекст веб-приложения расширенный контекст приложения, который предназначен для работы со стандартным javax.servlet.ServletContext, чтобы он мог взаимодействовать с контейнером.
Бины, созданные в WebApplicationContext, также смогут использовать ServletContext, если они реализуют интерфейс ServletContextAware.
С экземпляром ServletContext можно сделать много вещей, например, получить доступ к ресурсам WEB-INF (конфигам xml и т. Д.), Вызвав метод getResourceAsStream (). Обычно все контексты приложения, определенные в web.xml в приложении Spring сервлета, являются контекстами веб-приложения, это относится как к контексту корневого веб-приложения, так и к контексту приложения сервлета.
Кроме того, в зависимости от возможностей контекста веб-приложения тестирование вашего приложения может быть немного сложнее, и вам может понадобиться использовать класс MockServletContext для тестирования.
Различие между сервлетом и корневым контекстом Spring позволяет создавать многоуровневые иерархии контекста приложения, поэтому требуемый компонент будет выбран из родительского контекста, если он отсутствует в текущем контексте приложения. В веб - приложениях по умолчанию есть два уровня иерархии, корневые и сервлетов контексты: .
Это позволяет вам запускать некоторые сервисы как синглтоны для всего приложения (здесь обычно находятся bean-компоненты Spring Security и базовые сервисы доступа к базам данных), а другие как отдельные сервисы в соответствующих сервлетах, чтобы избежать конфликта имен между bean-компонентами. Например, один контекст сервлета будет обслуживать веб-страницы, а другой будет реализовывать веб-службу без сохранения состояния.
Это двухуровневое разделение возникает сразу после использования классов сервлетов Spring: для настройки контекста корневого приложения вы должны использовать тег context-param в вашем файле web.xml.
(контекст корневого приложения создается ContextLoaderListener, который объявлен в web.xml
) И сервлет тег для контекста приложения сервлета
Обратите внимание, что если init-param будет опущен, то Spring будет использовать myservlet-servlet.xml в этом примере.
Смотрите также: Разница между applicationContext.xml и spring-servlet.xml в Spring Framework
источник
Возвращаясь к дням сервлетов, web.xml может иметь только один
<context-param>
, поэтому при загрузке приложения сервером создается только один объект контекста, и данные в этом контексте распределяются между всеми ресурсами (например, сервлетами и JSP). Это то же самое, что иметь имя драйвера базы данных в контексте, которое не изменится. Аналогичным образом, когда мы объявляем contextConfigLocation param в<contex-param>
Spring, создается один объект Application Context.Вы можете иметь несколько сервлетов в приложении. Например, вы можете обрабатывать / secure / * запросы одним способом и / non-seucre / * другим способом. Для каждого из этих сервлетов у вас может быть объект контекста, который представляет собой WebApplicationContext.
источник
Принятый ответ исчерпан, но на это есть официальное объяснение:
Кстати, сервлет и корневой контекст оба являются webApplicationContext:
источник
ApplicationContext (корневой контекст приложения). Каждое веб-приложение Spring MVC имеет файл applicationContext.xml, который настроен как корневой каталог конфигурации контекста. Spring загружает этот файл и создает applicationContext для всего приложения. Этот файл загружается ContextLoaderListener, который настроен как параметр контекста в файле web.xml. И будет только один applicationContext для каждого веб-приложения.
WebApplicationContext: WebApplicationContext - это контекст приложения с веб-поддержкой, т. Е. Он содержит информацию о контексте сервлета. Одно веб-приложение может иметь несколько WebApplicationContext, и каждый сервлет Dispatcher (являющийся фронт-контроллером архитектуры Spring MVC) связан с WebApplicationContext. Файл конфигурации webApplicationContext * -servlet.xml является специфическим для DispatcherServlet. А поскольку в веб-приложении может быть настроено несколько сервлетов-диспетчеров для обслуживания нескольких запросов, в веб-приложении может быть несколько файлов webApplicationContext.
источник
Контекст веб-приложения , указанный
WebApplicationContext
интерфейсом, является контекстом приложения Spring для веб-приложений. Он имеет все свойства обычного контекста приложения Spring, учитывая, чтоWebApplicationContext
интерфейс расширяетApplicationContext
интерфейс, и добавляет метод для извлечения стандартного API сервлетаServletContext
для веб-приложения.В дополнение к стандартным областям применения bean-компонентов Spring
singleton
иprototype
три дополнительных области доступны в контексте веб-приложения:request
- ограничивает определение одного бина жизненным циклом одного HTTP-запроса; то есть каждый HTTP-запрос имеет свой собственный экземпляр компонента, созданного на основе определения одного компонентаsession
- ограничивает определение одного бина жизненным циклом сеанса HTTPapplication
- определяет единственное определение bean-компонента для жизненного циклаServletContext
источник