Java如何在SystemInitializer类中使用Spring自动连线
我有一个带有Java如何在SystemInitializer类中使用Spring自动连线,java,spring,autowired,Java,Spring,Autowired,我有一个带有springmvc的Java项目。 我需要在应用程序初始化后启动TimerTasks,因此我实现了WebApplicationInitializer接口,并将其称为SystemInitializer。在该类中,我有一个@Autowired属性,该@Autowired属性是一个DAO类。 我需要它,因为我想根据数据库中的记录执行一些任务。但自动连线属性永远是空的 public class SystemInitializer implements WebApplicationInitia
springmvc
的Java项目。
我需要在应用程序初始化后启动TimerTasks,因此我实现了WebApplicationInitializer
接口,并将其称为SystemInitializer
。在该类中,我有一个@Autowired
属性,该@Autowired
属性是一个DAO
类。
我需要它,因为我想根据数据库中的记录执行一些任务。但自动连线属性永远是空的
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");
}
}
您不能在
WebApplicationInitializer
内部使用@Autowired
您的bean尚未准备好(尚未扫描)进行注射。您的应用程序当时不知道什么是DomainResearchDao
只有在初始化应用程序并创建所有(单音)实例(@Component
,@Service
等)后,Spring才能自动连接bean
如果要在应用程序启动后执行某些操作,请使用Spring事件执行此操作:
@Component
public class DoOnStart{
@Autowired
private IYourService service;
@EventListener
public void handleContextRefresh(ContextRefreshedEvent e) {
// your CODE
}
}
只需实现这个类,无需自动连接。您是否用
@Repository
注释标记了DomainResearchDaoImpl
?我想是这样:@Repository(“domainResearchDao”)公共类DomainResearchDaoImpl扩展了AbstractDao{…domaineresearchdaoimpl
也应该实现domaineresearchdao
请检查:Andremoniy我把实现放在了我的代码中,我只是忘了放在这里…真的吗?我不知道…那我怎么做呢?我需要在我的应用程序初始化后启动一个服务,但只有一次。如果我把一些代码放在@C中配置类,将只执行一次?谢谢