Средство разрешения ресурсов контекста приложения Springframework - PullRequest
1 голос
/ 02 апреля 2012

Кто-нибудь знает, как манипулировать контекстом приложения Spring для использования указанного преобразователя ресурсов. Я написал ресурс s3 для извлечения контента из контекста безопасности из amazon s3 и средство распознавания ресурсов для создания этих «ресурсов» из URL-адресов типа s3: // ..., а локальный контекст приложения использует правильные учетные данные безопасности при загрузке из настроенного amazons3client. Я написал s3 ResourceLoader, который предварительно настраивает клиент AmazonS3 для вновь созданного ресурса s3.

Было бы неплохо иметь возможность указывать эти ресурсы в конфигурации контекста просто как "s3: // ..." и полагаться на этот преобразователь ресурсов для создания правильного типа ресурса, однако пока это требует переопределения Метод getResource объекта SpringConcept унаследован от DefaultResourceLoader, чтобы использовать мою собственную реализацию resourceResolver.

Другим способом является настройка преобразователя переменных для ресурсов, соответствующих схеме «s3: // ...», для разрешения типов ресурсов с этим преобразователем ресурсов.

Я надеюсь, что они - весенний гуру, который знает лучший способ манипулировать инфраструктурой контекста весеннего приложения (ClasspathXMLAC для аргументов), чтобы сделать мои требования безопасности S3 очень простыми для удовлетворения.

Другие предложения приветствуются.

1 Ответ

1 голос
/ 16 апреля 2012

Используйте реализацию Spring GenericApplicationContext, которая предоставляет вам метод #setResourceLoader.

Вы упомянули ClassPathXmlApplicationContext, который не является GenericApplicationContext, что означает, что вы вынуждены пойти по более уродливому переопределенному маршруту.

GenericXmlApplicationContext - это обычно предпочтительная альтернатива CPXAC, и, как следует из названия, это GenericApplicationContext.

Так что вы должны быть в состоянии сделать следующее:

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.setResourceLoader(new S3ResourceLoader());
ctx.load("s3:///some.bucket.name/path/to/my/spring.xml");
ctx.refresh();
...

Очевидно, что S3ResourceLoader должен быть параметризован с помощью ключей и т. Д. Обратите внимание, что S3ResourceLoader, вероятно, должен расширять DefaultResourceLoader для того, чтобы использовать все остальные доступные там функции, например, обработка "classpath:" и других префиксов ресурсов.

Порядок вызова в приведенном выше примере имеет значение, т. Е. Загрузчик ресурсов должен быть предоставлен до вызова #load с префиксом s3: resource по очевидным причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...