我有一个Spring MVC
的Java项目。
我的应用程序初始化后,我已经需要启动TimerTasks,因此我实现了WebApplicationInitializer
接口,并将其称为SystemInitializer
。在该类内部,我有一个@Autowired
属性,该@Autowired
属性是一个DAO
类。
我需要它是因为我想根据数据库中的记录执行一些任务。但是该Autowired属性永远为null。
public class SystemInitializer implements WebApplicationInitializer {
@Autowired
private DomainResearchDao domainResearchDao;
@Override
public void run() {
if (this.domainResearchDao != null) {
System.out.println("OK");
}
// always here
else{
System.out.println("NO OK");
}
}
最佳答案
您不能在@Autowired
内使用WebApplicationInitializer
。
您的Bean尚未准备好(尚未扫描)要注入。您的应用程序此时不知道DomainResearchDao
是什么。
只有在初始化应用程序并创建所有(单个)实例(@Component
,@Service
等)之后,Spring才能自动装配bean。
如果您想在启动应用程序后执行一些工作,请使用Spring Event来执行此操作:
@Component
public class DoOnStart{
@Autowired
private IYourService service;
@EventListener
public void handleContextRefresh(ContextRefreshedEvent e) {
// your CODE
}
}
只需实现此类,就无需对其进行自动装配。
关于java - Java如何在SystemInitializer类中使用Spring Autowired,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37503372/