Подтвердить что ты не робот

Почему Spring MVC требуется как минимум два контекста?

В Spring MVC есть два контекста. Одним из них является контекст приложения или глобальный контекст, который загружается с помощью ContextLoaderListener. Он принимает все файлы конфигурации, указанные в параметре contextConfigLocation.

Теперь, если вы используете Spring MVC, тогда требуется сервлет диспетчера, который загружает другой контейнер, который также известен как контейнер веб-приложения. Этот контейнер принимает глобальный контейнер в качестве родителя.

При интеграции struts1 с spring существует только один контекст. Почему для Spring mvc нужны два? Можно ли использовать только один контекст при использовании Spring mvc?

спасибо!

4b9b3361

Ответ 1

Представьте, что у вас было два отдельных диспетчера, каждый из которых выполнял разные задачи и каждый из которых имел свои зависимости. Вы будете настраивать их самостоятельно, используя отдельные контексты.

Если есть какая-либо общая конфигурация, это может идти в глобальном контексте.

Я не думаю, что возможно использовать только один контекст с помощью DispatcherServlet, поскольку он создает свой собственный контекст и связывает его с родительским контекстом (через суперкласс класса FrameworkServlet).

FrameworkServlet.createWebApplicationContext

Ответ 2

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

Вы можете достичь этой настройки, просто удалив ContextLoaderListener (и сопровождающий contextConfigLocation контекст-параметр) из вашего web.xml и переместив все определения bean в xml, определяющий контекст сервлета ([servlet-name]-servlet.xml).

Это возможно, потому что FrameworkServlet (суперкласс класса DispatcherServlet) не волнует, есть ли контекст корневого приложения при создании контекста сервлета. Он просто передает корневой контекст в качестве родителя, если он доступен. См. здесь код.

Ответ 3

Проверьте этот ответ О нескольких контейнерах в инфраструктуре spring

Да, вы можете иметь только один контекст.

Для повторного использования кода было бы лучше изолировать службы в Контексте приложения, а не в WebApplicationContext.but, но это не является принуждением. Вы можете хранить только только текст webApplicationcontext.