簡體   English   中英

Java 如何在 SystemInitializer 類中使用 Spring Autowired

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM