Похоже, OSGi - это именно то, что вы просите.Это может быть сложно, но есть способы справиться с этим.Некоторая сложность может быть уменьшена с помощью SpringDM или чего-то подобного для решения стандартных задач регистрации и использования сервисов во время выполнения.Регистрация служб, управляемая аннотациями, и внедрение зависимостей действительно сокращают объем кода, который необходимо написать.
Еще один способ уменьшить сложность состоит в том, чтобы развернуть основную часть вашего приложения в одном пакете и развернуть только те части, которые нуждаются в нем.быть модульным в свои собственные связки.Это снижает вероятность регистрации и использования служб из других пакетов во время выполнения, а также снижает сложность развертывания.Код, работающий в пакете, может использовать другой код в том же пакете, как и в стандартном приложении Java - нет необходимости взаимодействовать со средой выполнения OSGi.Противоположностью этого подхода является разбиение вашего приложения на множество отдельных пакетов, которые экспортируют четко определенные сервисы в другие пакеты в системе.Хотя это очень модульный подход, он сопряжен с дополнительной сложностью управления всеми этими пакетами и большим взаимодействием со средой выполнения OSGi.
Я бы посоветовал взглянуть на книгу «OSGi в действии», чтобы получитьсмысл вопросов и увидеть некоторые достойные образцы.