2010-05-27 6 views
16

J'ai une classe abstraite assez simpleprintemps, classe abstraite et annotations

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(); 
    } 

Maintenant vous pouvez voir, je suis en train de lier automatiquement le DatabaseModel. Mais dans ma classe étendue, je reçois seulement null pour le dbModel.

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

Question: J'essaie quelque chose d'impossible ici?

+0

Est-ce que vous avez le composant print-scan du paquet dans lequel se trouve votre classe abstraite? –

Répondre

22

Votre configuration semble correcte. La raison est peut-être ailleurs. Peut-être instanciez-vous la classe avec new CreateDatabaseAction(), plutôt que de laisser le printemps le faire.

+0

bon point. Je vais vérifier cela – onigunn

+1

+1: Spring permet autowiring dans les classes abstraites, donc votre suggestion est logique! – Espen

+0

Oui, c'était ça .. – hakish

1

Utilisez @Autowired et non @Inject de javax.inject.

L'injection de dépendances dans la classe abstraite ne fonctionne que pour le @Autowired du printemps.

FYI, j'utilise Spring 4.0; Java 6

+0

L'annotation '@ Resource' fonctionne également. – Jason

Questions connexes