Ich biete die Implementierung einer injizierten Service-Schnittstelle zur Laufzeit über eine producer
in meiner App.Wie wählt man eine spezifische Bean-Implementierung, ohne das Qualifikationsmerkmal zu verwenden?
Kürzlich wurde eine andere Implementierung der gleichen Service-Schnittstelle von jemandem in einem kollaborierenden Team erstellt und diese Klasse wurde in einem Jar hinzugefügt, den ich in meiner Anwendung nicht vermeiden kann. Dies wirft daher ambiguous dependency exception
, die ich offensichtlich durch einen CDI-Qualifier auf meiner Producer-Methode und am Injektionspunkt lösen kann. Ich wollte fragen, ob es noch einen anderen Weg gibt, diesen Overhead zu vermeiden. Kann ich meine @Produces
-Methode als Standardimplementierung verwenden, damit der Container die zweite Implementierung ignoriert? Ich fügte @Default
Annotation zusammen mit @Produces
Annotation auf der Producer-Methode hinzu, um zu überprüfen, ob dies das Problem löst, da jede Injektion standardmäßig mit @Default
annotiert ist. Aber das hat nicht funktioniert.
Vielleicht mit @Any Qualifier? Dies ist gelegentlich auch ein Qualifier, aber eingebettet. Wir verwenden es oft, wenn wir eine Implementierung zur Laufzeit auswählen müssen. Irgendeine Art von Plugins. Aber Sie werden natürlich eine andere Möglichkeit brauchen, um Ihre Implementierung in der Sammlung zu finden. – temaleva