Ответ
Количество контейнеров зависит от контекста и используемых технологий:
- Spring Framework: Обычно создается один корневой
ApplicationContext. Однако можно создавать иерархию контекстов (родительский и дочерние), что полезно для модульной структуры. - Servlet-контейнеры (Tomcat, Jetty): Как правило, один контейнер на веб-приложение (WAR), но поддерживаются вложенные контексты для отдельных модулей.
- Docker/Контейнеризация приложений: Количество ограничено только ресурсами хостовой системы.
Пример создания иерархии контекстов в Spring:
// Родительский контекст
ApplicationContext parentCtx = new ClassPathXmlApplicationContext("parent-config.xml");
// Дочерний контекст, наследующий бины родителя
ApplicationContext childCtx = new ClassPathXmlApplicationContext(
new String[] {"child-config.xml"}, parentCtx);
Практика: В большинстве монолитных приложений используется один контейнер. Несколько контейнеров характерны для сложных систем: мультимодульных приложений, микросервисной архитектуры или при изоляции компонентов.