Spring: Injektion von Mehrdeutigkeiten

JonnyRico

Mitglied
Moin,

ich suche ein Möglichkeit in Spring das gleiche zu machen was in in CDI mit:

Java:
@Inject
Instance<MyInterface> instances;

machen kann. Ich möchte also in meiner Spring-Config die Injektion eines Interfaces definieren und dann alle Objekte instanziiert bekommen, die dieses Interface implementieren. Um das Auflösen der Mehrdeutigkeit möchte ich mich also selbst kümmern bzw. ich brauche eigentlich alle Objekte.
Was ich allerdings noch besser finden würde wäre die Angabe des Interfaces + Annotation also die Entsprechung zu


Java:
@Inject
@OnlyBeansWithThisAnnotation
Instance<MyInterface> instances;

Kann mir jemand sagen wie und ob ich dies in Spring (Version ist mir egal) realisieren kann?

Gruß

Sascha

P.s. Konfigurieren möchte ich das ganze am liebsten in der Old-School XML-Config 😉
 
Hi,

nein das ich eigentlich nicht das was ich suche. Wenn ich zwei Klassen habe die das Interface MyInterface implementieren und ich in einer anderen Klasse einen Setter der Art
Java:
@AutoWired public void setMyObject(MyInterface value){...}
habe und ich in Spring dann auto-wire="ByType" einstelle, dann erhalte ich eine Exception, dass die Injection nicht ausgeführt werden kann, da eine Mehrdeutigkeit vorliegt. Er kann ja auch nicht wissen welches Objekt er injizieren soll. Bei meinem CDI-Beispiel muss der Container das auch gar nicht, denn er injected mir einfach beide in den Instance-Wrapper über den ich dann iterieren kann. So komme ich an alle Instanzen heran. Das würde ich auch gerne in Spring können nur leider weiß ich nicht wie.

Gruß

Sascha
 
Java:
@Autowired
private List<MyInterface> instances;

oder auch
Java:
@Inject
private List<MyInterface> instances;
 
Java:
@Autowired
private List<MyInterface> instances;

oder auch
Java:
@Inject
private List<MyInterface> instances;

Super danke das ist es. Ich hatte nicht erwartet das es auf die triviale Art funktioniert 😉 Da zeigt sich mal wieder "Do the simplest thing that could possibly work" 🙂

Danke
 

Zurück
Oben