Зачем использовать иерархии Spring ApplicationContext?

Я пытаюсь понять иерархии ApplicationContext весной.

Я узнал следующее

  1. ApplicationContext не может иметь более одного родительского ApplicationContext.
  2. Когда данный ApplicationContext не может разрешить bean-компонент, он передает запрос на разрешение своему родителю.
  3. Родитель ApplicationContext указывается в его конструкторе.

Я хотел бы понять, когда использовать иерархии ApplicationContext (вместо одного ApplicationContext).

Лучшее, что я мог получить от Google, было это. И я понимаю, что если приложение имеет большое количество bean-компонентов, определенных на разных уровнях, то каждый уровень, имеющий свой собственный ApplicationContext, будет преимуществом. То, что не понято, - в чем выгода и как это достигается?

ТИА, Виджай

1 ответ

Решение

Классический вариант использования этого, когда у вас есть несколько Spring DispatcherServlet в пределах одного веб-приложения, причем каждый из этих сервлетов имеет собственный контекст приложения, но который должен делиться компонентами между ними. В этом случае вы добавляете третий контекст на уровне веб-приложения, которое является родительским для каждого из сервлетов приложения.

Вы можете пойти дальше по этому шаблону, например, если у вас есть несколько веб-приложений, связанных в один EAR JavaEE. Здесь EAR может иметь свой собственный контекст, который является родительским для отдельных контекстов веб-приложения, который является родительским для контекстов сервлета и так далее. У вас есть эта иерархия ответственности.

В других ситуациях структура контекста диктуется каким-то другим фактором. Например, Spring Security не зависит от Spring MVC и требует, чтобы его конфигурационные компоненты входили в контекст веб-приложения. Если вы хотите использовать Spring MVC с ним, то конфигурация для этого должна идти в контекст сервлета, который имеет корневой контекст веб-приложения в качестве родителя.

Другие вопросы по тегам