Контекст # 1 вообще не связан с другими контекстами, это просто деталь реализации того, как вы запускаете свой веб-сервер (Jetty).
Контексты № 2 и № 3 несколько поясняются в справочной документации Spring .
- Контекст # 2 загружен из
WEB-INF/[servlet-name]-servlet.xml
. Поскольку может быть много DispatcherServlets, в одном веб-приложении может быть несколько таких контекстов для разных сервлетов.
- Контекст # 3 обычно загружается из
WEB-INF/applicationContext.xml
, и для его загрузки необходимо предпринять особые шаги (используйте ContextLoaderListener ). Этот загруженный контекст становится родительским контекстом (общим) всех определенных контекстов сервлета в конкретном веб-приложении. Таким образом, он подходит для загрузки bean-компонентов бизнес-служб и bean-компонентов доступа к базе данных.
Настройка, которую вы обрисовали, в порядке. На самом деле, я бы назвал это рекомендуемой установкой, поскольку она упрощает и приближает к тому, как создаются контексты Spring в типичном веб-приложении.
Тем не менее:
Вы можете избавиться от контекста # 3 , если вы не хотите хранить свои бизнес-компоненты в отдельном контексте. Тем не менее, я бы порекомендовал вам хранить их отдельно (вам может понадобиться перенести их на другой компьютер позже и сделать доступным через какой-то механизм удаленного взаимодействия).
Еще одна причина избавиться от контекста # 3 : вы можете поделиться своими бизнес-бинами между несколькими веб-приложениями. Для этого вам понадобится специальный подкласс Spring ContextLoader, а затем поработайте над тем, как Jetty запускает ваши веб-приложения. Я сделал это и могу при необходимости дать несколько советов.
Наконец, вы можете избавиться от контекста # 1 и заменить его старым школьным чистым Java-кодом, который загрузит Jetty. Это решение на 100% зависит от вас и зависит от ваших предпочтений. Для записи, я также хотел бы использовать отдельное Spring applicationContext для начальной загрузки Jetty.