Angenommen, es ist der folgende Code:Dependency Injection durch die Bedingung in der Laufzeit
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
class Controller {
/* inject here */
public @NonNull GenericService service;
public void doo(List<GenericDTO> list, String type) {
service.doo(list);
}
}
class GenericDTO { ... }
class GenericService { ... }
class OfferService extends GenericService { ... }
class OtherService extends GenericService { ... }
Wenn type
von doo
Methode "offer"
gleich ist, möchte ich eine OfferService
Instanz service
injizieren. Wenn ich "other"
erhalte, muss ich OtherService
verwenden, und so weiter. Ist das möglich?
Nun, nein. Dies ist ein einzelnes Feld. Es wird einmal injiziert (wenn es sich um eine Singleton-Bohne handelt). Die Injektionslogik hat keinen Zugriff auf einen Wert, der in einem Methodenaufruf vorhanden ist. Einfach beide Dienste injizieren und ein 'if' verwenden, um zu entscheiden. Erstellen Sie alternativ eine "Map", um den entsprechenden Dienst basierend auf dem Schlüsseltyp auszuwählen. –