Cześć,
mam taki problem. Jest kilka serwisów, które dzielą wspólną bibliotekę. Wygląda to tak, że współdzielona biblioteka common-lib jest dodana jako dependency do danej aplikacji/serwisu, który po prostu ma ją na liście swoich dependencji np. w pom.xml. Serwis wykorzystuje DI ze springa. Dajmy na to ten serwis nazywa się MyService
I teraz w MyService mamy klasę dajmy na to zaimplementowany serwis
@Service
public class SomeService extends AbstractSomeService {
public SomeService(ServiceFromCommonLibrary serviceFromCommonLibrary){
super(serviceFromCommonLibrary)
}
public void someLogic(){
logic()
}
}
A w bibliotece mamy klasę abstrakcyjną, oraz klasę ServiceFromCommonLibrary.
@Slf4J
public abstract class AbstractSomeService{
private ServiceFromCommonLibrary serviceFromCommonLibrary
public SomeService(ServiceFromCommonLibrary serviceFromCommonLibrary){
this.serviceFromCommonLibrary = serviceFromCommonLibrary;
}
public logic(){
log("Some repeated log");
this.serviceFromCommonLibrary.whaterver();
}
}
Małe wyjąsnienie dlaczego tak to wygląda. Na poziomie biblioteki common-lib nie ma włączonego autoscanowania zależności, brak "standardowej" klasy Application z metodą main. Więc tam wstrzykiwania zależności nie ma. Natomiast na poziomie serwisu już oczywiście wszystkie funkcjonalności springa są dostępne. To co tu się dzieje to po prostu tworzona jest insancja serwisu ServiceFromCommonLibrary na poziomie serwisu MyService. Następnie ta utworzona instancja jest przekazana do współdzielonej biblioteki common-lib.
Takie coś działa. Jednak chciałbym zapytać, czy to rozwiązanie to jest dobra praktyka czy może anty-wzorzec? Ja osobiście bardzo chciałbym się tego pozbyć z kodu. Moim zdaniem chyba lepiej duplikować jest tą logikę z metody logic, niż tworzyć instancje serwisów na poziomie aplikacji, które następnie są niejako forwardowane do biblioteki i tam używane.
Będę wdzięczny za odpowiedź na to pytanie, najlpiej podpartą jakimiś linkami. Próbowałem znaleźć posty na temat tego problemu ale bezskutecznie. Jeśli się powtórzyłem i to już jest na forum to przeprasza.
Pozdrawiam