gpt4 book ai didi

Java 如何在 SystemInitializer 类中使用 Spring Autowired

转载 作者:行者123 更新时间:2023-11-30 07:21:25 24 4
gpt4 key购买 nike

我有一个带有 Spring MVC 的 Java 项目。我需要在应用程序初始化后启动 TimerTasks,因此我实现了 WebApplicationInitializer 接口(interface),并将其称为 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");
}
}

最佳答案

您不能在WebApplicationInitializer内部使用@Autowired

您的 Bean 尚未准备好(尚未扫描)以进行注入(inject)。您的应用程序当时不知道 DomainResearchDao 是什么。

只有在应用程序初始化并创建所有(单例)实例(@Component@Service 等)后,Spring 才能 Autowiring bean。

<小时/>

如果您想在应用程序启动后执行某些操作,请使用 Spring Event 来执行此操作:

@Component
public class DoOnStart{

@Autowired
private IYourService service;

@EventListener
public void handleContextRefresh(ContextRefreshedEvent e) {
// your CODE
}

}

只需实现此类,无需 Autowiring 它。

关于Java 如何在 SystemInitializer 类中使用 Spring Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com