[英]Java How use Spring Autowired in SystemInitializer class
我有一個帶有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");
}
}
您不能在WebApplicationInitializer
使用@Autowired
。
您的 Bean 尚未准備好(尚未掃描)以進行注入。 您的應用程序DomainResearchDao
不知道DomainResearchDao
是什么。
只有在您的應用程序初始化並創建所有(單調)實例( @Component
、 @Service
@Component
等)之后,Spring 才能自動裝配 bean。
如果您想在應用程序啟動后做一些工作,請使用 Spring Event 來執行此操作:
@Component
public class DoOnStart{
@Autowired
private IYourService service;
@EventListener
public void handleContextRefresh(ContextRefreshedEvent e) {
// your CODE
}
}
只需實現這個類,不需要自動裝配它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.