Wyszukiwanie implementacji API

0

Szukam sposobu łatwego instancjonowania oraz rozszerzania implementacji danego API.
Założenie jest takie: jest sobie moduł który używa ustalonego API. Teraz chciałbym mieć możliwość jak najbardziej bezinwazyjnego dodawania nowych implementacji tego API tak aby nie ingerować w kod modułu który go używa. Moduł wie na podstawie requestu której implementacji użyć.

Wymyśliłem coś takiego:
Każda nowa implementacja będzie implementowć API w osobnym jarze. Jary będą podpięte do modułu jako dependencje. I teraz moduł refleksją będzie instancjonować konkretną implentację
np. Class.forName(className).newInstance()

Pełne nazwy klas będą zdefiniowane w zmiennych środowiska:
reuestType1 = com.xyz.className1
requestType2 = com.xyz.className2
requestType3 = com.xyz.className3

Jakie widzicie sposoby rozwiązania tego inaczej ?

1

A po co w ogóle ta refleksja? Nie możesz po prostu zrobić sobie przy starcie aplikacji mapy string->interface? Jak używasz stringa i te implementacje to beany to w ogóle taką mapę może ci zrobić automatycznie.

0

To jakiś overengineering. Dopóki wprowadzasz kompatybilne zmiany, możesz dowoli zmieniać implementację API. W przypadku zmian niekompatybilnych poczytaj o wersjonowaniu API.

1

Ew. ktoś może w końcu by wykorzystał Java 9 Modules. :)

Wówczas trzeba odpowiednio zdefiniować serwisy i ich implementacje, a później ładować je ServiceLoaderem (można bez problemu to wywołać w runtime, bez potrzeby restartu).
Byłem kiedyś na prezentacji Sandera Maka (współautora Java 9 Modularity) i pokazywał przykład aplikacji, w której stosował różne algorytmy obliczania liczby sylab w tekście i usuwał / dodawał nowe implementacje w runtime.

Kod: https://github.com/java9-modularity/easytext
Slajdy z prezentacji: https://www.slideshare.net/SanderMak/java-9-modularity-in-action

1 użytkowników online, w tym zalogowanych: 0, gości: 1