2010-05-27 12 views
16

ich eine ziemlich einfache abstrakte Klasse habeSpring, abstrakte Klasse und Anmerkungen

public abstract class AbstractServiceActions { 

    @Autowired 
    protected DatabaseModel dbModel; 

    protected User user; 
    protected boolean complete; 
    protected String serviceResult; 

    public AbstractServiceActions(User user) { 
     this.user = user; 
     this.serviceResult = ""; 
    } 

    public abstract String doAction(); 
    } 

Jetzt können Sie sehen, ich versuche, das Datenbankmodell autowire. Aber in meiner erweiterten Klasse erhalte ich nur null für das dbModel.

@Component 
public class CreateDatabaseAction extends AbstractServiceActions { 
.... 
} 

Frage: Versuche ich hier etwas Unmögliches?

+0

Haben Sie Federkomponenten-Scan das Paket, in dem Ihre abstrakte Klasse ist? –

Antwort

22

Ihr Setup scheint in Ordnung zu sein. Der Grund liegt vielleicht woanders. Vielleicht instanziieren Sie die Klasse mit new CreateDatabaseAction(), anstatt es dem Frühling zu überlassen.

+0

guter Punkt. Ich überprüfe das. – onigunn

+1

+1: Spring ermöglicht das Autowiren in abstrakten Klassen, also macht Ihr Vorschlag Sinn! – Espen

+0

yup, das war es .. – hakish

1

Verwenden Sie @Autowired und nicht @Inject von javax.inject.

Die Abhängigkeitsinjektion in der abstrakten Klasse funktioniert nur für die @Autowired des Frühlings.

FYI, ich benutze Frühling 4.0; Java 6

+0

Die Annotation @Ressource funktioniert ebenfalls. – Jason