Java如何在SystemInitializer类中使用Spring Autowired

时间:2016-05-28 20:14:20

标签: java spring autowired

我有一个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");
    }
}

1 个答案:

答案 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
    }

}

只需实现此类,无需自动装配它。