2016-03-30 6 views
0

Hy eine abstrakte Klasse erweitert,Injizieren Sie eine Liste von Klassen, die mit Feder

ich den nächsten Code haben:

public abstract class MyClass{ 
    protected abstract void method1(); 
} 

Klassen, die die erste erweitern:

@Component 
public class MyClass1 extends MyClass{ 
    ..... 
} 

@Component 
public class MyClass2 extends MyClass{ 
    ..... 
} 

Meine Klasse wo ich versuche, eine Liste von Klassen zu injizieren, die eine abstrakte Klasse erweitert

@Component 
public class SpringClass{ 

    @Autowired **//It doesnt work, nothing is inyected!** 
    List<MyClass> classes 

} 

Mein Problem ist, es funktioniert nicht, es injiziert nicht die Liste der Klassen, die MyClass in Eigenschaftsklassen erweitern. Warum?

Dank

+1

Es sollte für Frühling 3.1+ funktionieren, denke ich. Siehe http://stackoverflow.com/questions/1450145/spring-list-beans-by-type Funktioniert die Injektion für den Normalfall (nur MyClass1 zum Beispiel injizieren) und nicht für eine Liste? –

+0

Sind Sie sicher, dass Ihre Komponenten gescannt wurden? – luboskrnac

+0

Ja, meine Komponenten werden gescannt, aber wenn ich eine Schnittstelle benutze, wird die Liste angezeigt, wenn ich eine abstrakte Klasse no verwende; es ist egal, wenn ich versuche, eine Liste oder ein einzelnes Element zu injizieren, es funktioniert nicht mit einer abstrakten Klasse – user3254515

Antwort

0

Sie können @Autowired Anmerkung für das Instanzvariable entfernen und es in der Setter-Methode hinzufügen. Danach wäre Ihr Frühling Klasse

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 

@Component 
public class SpringClass { 

    List<MyClass> classes; 

    @Autowired 
    public void setClasses(List<MyClass> classes) { 
     this.classes = classes; 
    } 


} 

Hoffen, dass dies hilft.

+0

Es spielt keine Rolle (wo @Autowired lokalisiert wird), Quelle von der Frage funktioniert gut für mich. –