Зачем использовать иерархии Spring ApplicationContext?
Я пытаюсь понять иерархии ApplicationContext весной.
Я узнал следующее
- ApplicationContext не может иметь более одного родительского ApplicationContext.
- Когда данный ApplicationContext не может разрешить bean-компонент, он передает запрос на разрешение своему родителю.
- Родитель ApplicationContext указывается в его конструкторе.
Я хотел бы понять, когда использовать иерархии ApplicationContext (вместо одного ApplicationContext).
Лучшее, что я мог получить от Google, было это. И я понимаю, что если приложение имеет большое количество bean-компонентов, определенных на разных уровнях, то каждый уровень, имеющий свой собственный ApplicationContext, будет преимуществом. То, что не понято, - в чем выгода и как это достигается?
ТИА, Виджай
1 ответ
Классический вариант использования этого, когда у вас есть несколько Spring DispatcherServlet
в пределах одного веб-приложения, причем каждый из этих сервлетов имеет собственный контекст приложения, но который должен делиться компонентами между ними. В этом случае вы добавляете третий контекст на уровне веб-приложения, которое является родительским для каждого из сервлетов приложения.
Вы можете пойти дальше по этому шаблону, например, если у вас есть несколько веб-приложений, связанных в один EAR JavaEE. Здесь EAR может иметь свой собственный контекст, который является родительским для отдельных контекстов веб-приложения, который является родительским для контекстов сервлета и так далее. У вас есть эта иерархия ответственности.
В других ситуациях структура контекста диктуется каким-то другим фактором. Например, Spring Security не зависит от Spring MVC и требует, чтобы его конфигурационные компоненты входили в контекст веб-приложения. Если вы хотите использовать Spring MVC с ним, то конфигурация для этого должна идти в контекст сервлета, который имеет корневой контекст веб-приложения в качестве родителя.