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中配置类,将只执行一次?谢谢