Что еще можно использовать в Java в качестве альтернативы ServiceLoader?
Я ищу что-то вроде ServiceLoader, но это не зависит от файла SPI, где все реализации служб должны быть перечислены, а затем добавлены к пути какого-либо загрузчика классов, чтобы их можно было найти.
Допустим, есть приложение, которое имеет интерфейс и некоторые реализации службы. Какую инфраструктуру можно использовать, которая позволяет вам добавить новый JAR-файл в приложение, который содержит несколько новых реализаций, и они могут автоматически добавляться в путь классов всех загрузчиков классов внутри этого приложения? Все загрузчики классов здесь очень важны, потому что, если это приложение модуля NetBeans, платформа NetBeans совершает странную магию, и вы никогда не знаете, какой загрузчик классов используется каким потоком, с каким путем к классу и т. Д., если приложение не нужно перезапускать, чтобы найти новый JAR, но это не является важным требованием.
Я уже слышал об OSGi, но он кажется слишком большим, и мне нужен только 1% его возможностей.
Спасибо за любые предложения!
3 ответа
Самое простое решение - использовать JSPF.
Более "корпоративным" можно было бы использовать OSGi ... но в этом случае вам придется взглянуть на iPOJO, в качестве примера. Извините, я наконец перечитал ваше сообщение. Я думаю, что вопреки тому, что вы говорите, OSGi точно подходит для ваших нужд, так как он точно позволяет загружать сервисы и динамически подключаться.
И контейнеры IoC могут предоставлять, с некоторыми расширениями, такую функцию (я думаю, что по крайней мере возможно использовать расширение Guice).
Более новая альтернатива (это старый вопрос) может быть sezpoz.
Это очень похоже на JDK ServiceLoader в том, что он использует META-INF
поиск ресурсов, за исключением того, что ресурсы автоматически создаются процессором аннотаций. Таким образом, его аннотации очень тяжелые и обычно более безопасные по типу за счет последующей обработки. Его использует Хадсон / Дженкинс.
Я думаю, что Kohsuke был первым, кто предложил эту идею обработки аннотаций: http://metainf-services.kohsuke.org/