2017-02-09 3 views
2

У меня есть прецедент, где я хотел бы предложить простой API для расширения функциональности моего приложения scala.DI или Service Locator: внедренные реализации во время выполнения (без статической привязки) в scala

я провел последнюю пару дней, пытаясь найти/рамки DI SCALA Java или библиотеку, которая выполняет следующую за мной:

  1. определяет реализацию интерфейса/признак на пути к классам
  2. создает и внедряет указанные реализации (важная особенность: все из них) на отмеченном сайте, желательно с аннотацией
  3. выше не может произойти в компиляторе, потому что мне нужна архитектура плагина, где плагины не вводятся до запуска JVM
  4. поэтому выше может произойти в JVM начала (без горячей замены необходимо)

Я тяготея больше и больше к OSGi DS, что я большой поклонник, за исключением того, я вижу это как избыточна из-за # 4.

Я посмотрел на указ, сварил, скалади и macwire, и не мог сразу увидеть простой способ сделать это. Моя цель заключается в том, чтобы авторы «плагинов» не должны были точно знать о моем решении для инъекций/IoC, за исключением случайной аннотации (предпочтительно JSR330). На месте инъекции я готов справиться с более уродливыми вещами. :-)

Нужно ли мне рулонировать свое решение здесь, пойти с OSGi, или я пропустил что-то тривиальное в вышеупомянутых библиотеках?

пс: я пытаюсь держаться подальше от OSGi в основном из-за его взаимодействие с каркасом приложения я использую (Акку - не уверен, что расслоение/DS жизненного цикла хорошо смешивается с единой системой актера)

ответ

1

Если вы можете себе это позволить, это, вероятно, лучший (не только для вас, но и для всей экосистемы), чтобы пойти с предложением Петра.

Правильно говоря, Java имеет SPI, который приходит OOTB и может быть самым простым способом в вашем конкретном случае.

+0

на первый взгляд это выглядит идеально. Я буду погружаться в это. Благодаря! – pgn

1

Я смотрю, какая функциональность предоставляется Scaldi на данный момент. Я нашел, что он достаточно зрелый. Поэтому нет ничего сложного в использовании этой библиотеки DI для достижения ваших целей. Например, вы можете реализовать только код для поиска, специально аннотированный/указанный в каком-либо файле конфигурации или что-то еще.

+0

Я не уверен, что понимаю ваше последнее предложение, извините. Я хочу избежать создания привязок, потому что, ну, я не знаю конкретных типов спереди. Но теперь я думаю, что программная конкатенация Модулей (со статическими связями внутри них) в некотором «модуле контейнера» может быть моим единственным способом – pgn

+0

@pghn. Это невероятно то, о чем я говорил, поиск и интуиция компонентов во время выполнения. – Dmitry

1

Если вам понравилась DS (и она кажется очень подходящей для вашей проблемы), то почему бы не решить любые проблемы с Akka? Я уверен, что другие будут готовы помочь, так как это выглядит как интересная комбинация.

Смежные вопросы