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