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
Related videos on Youtube
Author by
onigunn
Interests iOS / Cocoa Android cloud technology clean code BDD and TDD Web Technologies
Updated on June 15, 2020Comments
-
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 over 11 yearsAre you having spring component-scan the package that your abstract class is in?
-
-
Espen almost 14 years+1: Spring allows autowiring in abstract classes, so your suggestion makes good sense!
-
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 almost 9 yearsthere are many ways to do that. annotations, xml, javaconfig.