2016-10-06 24 views
1

私の春の豆で私は春のイベントの機能を使用したいと思います。問題は、Springコンテキストが初期化されておらず、何らかの理由でBeanがイベントが発生する前にイベントを送信できる場合、イベントを送信できないことです。春のコンテキストが開始されたかどうかを確認する正しい方法

私は次のように使用:

  1. ApplicationContextAwareを実装し、ConfigurableApplicationContext.isActive()を使用する - この - これはIllegalStateException("LifecycleProcessor not initialized...
  2. ContextRefreshedEventをリッスン例外がスローされます - これは、コンテキスト初期化フェーズの開始
  3. 使用ConfigurableApplicationContext.isRunning()に真になりますこれは内部のBeanであり、実装するBeanのプロパティとして使用されるため動作しません。BeanFactoryPostProcessor
  4. implement SmartLifecycleも内側の豆

のためにために動作しません。だから何であるEASYとコンテキストが実行されていて、イベントを送信できるかどうかを判断するための正しい方法?

+0

簡単な方法は、内部Beanを使用せず、 'SmartLifecycle'を実装することです。しかし、あなたがイベントを早期に送るという事実を修正するために必要な本当の問題ではありませんか? –

+0

はい - 根本的な問題は、イベントを送信するのが早すぎることを防ぐことです。春がイベントを配信する準備ができているかどうかを見つける方法。 –

+0

外部BeanがBeanFactoryPostProcessorを実装している場合、ContextRefreshedEventについてのバグhttps://jira.spring.io/browse/SPR-14783を追加しました。 –

答えて

0

春4.1.7のこれはすでにSPR-13667に固定されています。

関連する問題