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

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

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

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

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

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

ТИА, Виджей

Ответ 1

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

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

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