2017-11-13 6 views
0

は、以下のコードスニペットあるコンテキスト負荷の前に春にカスタムイベントを公開することはできません私は以下のようにリスナーの一部で注釈を使用しています</p> <p>onConnectionOpenedはなります、私は春のMVCでのカスタムイベントを公開しようとしていますが、コンテキストのロード中に発射されていないされて

@Autowired 
private ApplicationEventPublisher publisher; 

public void onConnectionOpened(EventObject event) { 
    publisher.publishEvent(new StateEvent("ConnectionOpened", event)); 

} 

を@PostConstruct使用して豆の初期化後にトリガされたサーバーに接続した後に呼び出さ

@EventListener 
public void handleConnectionState(StateEvent event) { 
    System.out.println(event); 
} 

コンテキストがロードまたはリフレッシュされた後にイベントが発生するのを確認できましたが、コンテキストのロードまたはリフレッシュ後にカスタムアプリケーションイベントを発行できることが予想されますか。

私は事前

+0

'@ EventListener'は、コンテキストが完全に初期化されたときに処理されます。あなたが本当に早くイベントをキャッチしたいのであれば(もしそれらを公開することができたとしても)、 '@ EventListener'の代わりに' ApplicationListener 'を使用してください。 –

+0

ApplicationListener が働いています。Deinum –

答えて

0

@EventListener注釈がすべてのBeanをインスタンス化し、準備ができているとすぐに実行されますEventListenerMethodProcessorによって処理されている中で春に4.3.10

感謝を使用しています。あなたは@PostConstructアノテーション付きメソッドからイベントを公開しているとして、それはないすべてがその時点で稼働していると@EventListenerベースの方法がまだ検出されていないことかもしれません。あなたは何ができるか代わりに

は、イベントを取得し、それらを処理するためにApplicationListenerインタフェースを使用しています。

public class MyEventHandler implements ApplicationListener<StateEvent> { 

    public void onApplicationEvent(StateEvent event) { 
     System.out.println(event); 
    } 
}  
関連する問題

 関連する問題