Фактический вопрос: есть ли способ заставить XmlWebApplicationContext загружать ресурсы, используя пути относительно местоположения контекста? Для ясности предположим, что «местоположение контекста» — это расположение первого файла, указанного с помощью метода setConfigLocation().
Подробное объяснение приведено ниже:
Я использую Spring MVC на веб-уровне и Spring IOC на промежуточном уровне. Соответствующие контексты определяются иерархически, как описано в документации Spring.: веб-материалы определены в my-servlet.xml, а сервисы и др. определены в services.xml, которые загружаются через ContextLoaderListener. Средний уровень может быть развернут либо вместе с веб-уровнем (например, все это выполняется в ServletContainer), либо отдельно (в этом случае services.xml заменяется remote-services.xml, определяющим удаленные заглушки). Вся установка работает отлично, за исключением следующей проблемы:
У меня есть определенные ресурсы (дополнительные файлы XML, что у вас есть), расположенные в той же папке, что и services.xml, которые должны быть доступны указанным службам. Эти ресурсы указаны как зависимости в services.xml с использованием относительных путей. Когда средний уровень развернут автономно, это работает нормально, но не когда он развернут в контейнере сервлетов. В последнем случае контекст среднего уровня создается как XmlWebApplicationContext, который загружает все ресурсы, основанные на корневом контексте сервлета, что означает, что мне нужно добавлять ко всему префикс /WEB-INF/, чего я действительно хотел бы избежать. Аналогичная проблема возникает и при использовании PropertyPlaceholderConfigurer.
Я знаю, что могу обойти это, загрузив ресурсы из пути к классам, но это тоже не идеально - для автономного развертывания это означает, что мне нужно добавить папку конфигурации в путь к классам, а для веб-развертывания это означает, что все должно быть скопировано в WEB-INF/ классы.
Есть идеи?