我有一个Spring MVC
的Java项目。
我的应用程序初始化后我需要启动TimerTasks,所以我实现了WebApplicationInitializer
接口,我称之为SystemInitializer
。在该类中,我有@Autowired
属性,@Autowired
属性是DAO
类。
我需要它,因为我想根据我的数据库中的记录执行一些任务。但是,Autowired属性永远是空的。
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");
}
}
答案 0 :(得分:1)
您无法在@Autowired
内使用WebApplicationInitializer
。
您的豆子尚未准备好(尚未扫描)注射。您的应用程序不知道当时DomainResearchDao
是什么。
只有在初始化应用程序并创建所有(单机)实例(@Component
,@Service
等)后,Spring才能自动装配bean。
如果您想在应用程序启动后执行某项工作,请使用Spring Event执行此操作:
@Component
public class DoOnStart{
@Autowired
private IYourService service;
@EventListener
public void handleContextRefresh(ContextRefreshedEvent e) {
// your CODE
}
}
只需实现此类,无需自动装配它。