我有一个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/

10-12 02:33