Spring, abstract class and annotations

33,544

Solution 1

Your setup seems fine. The reason perhaps lies elsewhere. Maybe you are instantiating the class with new CreateDatabaseAction(), rather than letting spring do this.

Solution 2

Use @Autowired and not @Inject from javax.inject.

Dependency injection in abstract class only works for spring's @Autowired.

FYI, I'm using Spring 4.0; Java 6

Share:
33,544

Related videos on Youtube

onigunn
Author by

onigunn

Interests iOS / Cocoa Android cloud technology clean code BDD and TDD Web Technologies

Updated on June 15, 2020

Comments

  • onigunn
    onigunn almost 4 years

    I've got a pretty simple abstract class

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

    Now you can see, I'm trying to autowire the DatabaseModel. But in my extended class I only recieve null for the dbModel.

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

    Question: Am I trying something impossible here?

    • Admin
      Admin over 11 years
      Are you having spring component-scan the package that your abstract class is in?
  • Espen
    Espen almost 14 years
    +1: Spring allows autowiring in abstract classes, so your suggestion makes good sense!
  • Spring
    Spring almost 9 years
    @Bozho but how do you let Spring create instance here, constructor of base class expects a parameter, how do you set that in the Annotation?
  • Bozho
    Bozho almost 9 years
    there are many ways to do that. annotations, xml, javaconfig.