2016-05-28 8 views
1

私はSpring MVCのJavaプロジェクトを持っています。 私はアプリケーションが初期化された後、すでにTimerTasksを起動する必要があるので、WebApplicationInitializerインターフェイスを実装しました。SystemInitializerと呼びます。そのクラスの中で私は@Autowiredプロパティを持っていて、その@AutowiredプロパティはDAOクラスです。 データベースからの録音に基づいていくつかのタスクを実行したいからです。しかしAutowiredプロパティは常にnullです。JavaどのようにSpringをSystemInitializerクラスでオートワイヤードする

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"); 
    } 
} 
+0

'@ Repository'アノテーションで' DomainResearchDaoImpl'とマークしましたか? – Andremoniy

+0

@Repository( "domainResearchDao") パブリッククラスDomainResearchDaoImplはAbstractDao を拡張します。{... –

+0

'DomainResearchDaoImpl'は' DomainResearchDao'を実装する必要があります – Andremoniy

答えて

1

あなたはWebApplicationInitializerの内部@Autowiredを使用することはできません。

あなたのBeanは注入準備ができていません(まだスキャンされていません)。あなたのアプリケーションは、その時点で何がDomainResearchDaoであるか分かりません。

Springは、アプリケーションが初期化され、すべての(singletone)インスタンス(@Component@Serviceなど)が作成された後でのみ、Beanを自動作成できます。


、あなたのアプリケーションが起動された後、いくつかの仕事をしたい場合は、これを行うために春のイベントを使用します。

@Component 
public class DoOnStart{ 

    @Autowired 
    private IYourService service; 

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

} 

だけで、それをautowireする必要がこのクラスを実装していません。

+0

本当ですか?私はそれを知らなかった...どうすればいい?私はアプリケーションを初期化した後で既にサービスを開始する必要があります。 @Configurationクラスにいくつかのコードを置くと、一度だけ実行されます。ありがとう@ 012私は試してみます –

+0

ありがとう! –

関連する問題