Spring: Injektion von Mehrdeutigkeiten

Diskutiere Spring: Injektion von Mehrdeutigkeiten im Application Tier Bereich.
J

JonnyRico

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 ;)
 
J

JonnyRico

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
 
M

mvitz

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

JonnyRico

Krass das funzt? Das werde ich morgen gleich mal testen. Bekomme ich das auch komplett ohne Annotation hin. Also ausschließlich mit XML-Config?
 
J

JonnyRico

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
 
Thema: 

Spring: Injektion von Mehrdeutigkeiten

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben