OSGi уже имеет концепцию ранжирования услуг. При регистрации службы вы можете указать значение для свойства "service.ranking" (org.osgi.framework.Constants.SERVICE_RANKING).
Я не думаю, что это свойство влияет на порядок, в котором BundleContext # getServiceReferences () возвращает доступные ссылки на сервисы (по крайней мере, спецификация ничего об этом не говорит), но вы все равно можете использовать значение свойства заказать внутреннюю коллекцию, управляемую вашей "супер" службой конфигурации.
Однако для меня, как правило, странная идея позволить самой реализации сервиса определить ее относительную важность. Я бы лучше разделил проблему на две части.
- Служба конфигурации, выполняющая роль фасада для
- коллекция поставщиков исходного кода конфигурации
Второй интерфейс будет включать некоторую концепцию определения характеристик (например, enum {file, registry, net}
). Тогда я бы попросил реализацию первого интерфейса (фасад) выполнить упорядочение на основе характеристик каждого провайдера (как уже предлагает первый ответ Криса).