Bean @Dependsonに注釈を付けることは、依存したBeanがインスタンス化または初期化されることを意味しますか?

StackOverflow https://stackoverflow.com/questions/8822712

  •  27-10-2019
  •  | 
  •  

質問

Spring 3.0.2を使用しています。比較的単純な2つの豆の定義があります。 @Dependson Bean(Bean 'B')が準備する必要がある一連のイベントをトリガーする@PostConstruct(Bean 'A')があります。ただし、豆「A」は豆「B」に依存していると述べたとしても、豆「A」のイベント(ライフサイクル方法)が豆「B」が完全に初期化される前に実行されると述べたようです。

豆が@dependsonを介して「依存」している(またはその点では、豆の定義に依存する)ことは、依存する豆のライフサイクル方法が、上記の豆に依存する豆の前に完了することを意味しますか?

Bean 'B'ライフサイクル方法は、bean 'a'の前に完了しますか?

アップデート

Bean Aは、JMSテンプレートを使用して、初期化されたことを発表するメッセージを送信するカスタムクラスです。

上記のメッセージの受信者はそれを処理し、その構成をMessageListeningContainer(Bean B)に転送します。

最初の部分は、Bean BがDefaultLifeCycleProcessorによって開始される前にすべて発生しています。

@Component
@DependsOn("beanB")
public class BeanA {
    @PostConstruct
    public void init() {
        // do stuff
    }
}

<bean id="beanB" class="org.springframework.jms.listener.DefaultMessageListenerContainr">
    <!-- other configuration -->
</bean>

初期的な方法で、Bean Bの注入と2つの伐採ステートメントを追加しました。

container.isRunning();
container.isActive();

スプリングソースを見て、ISACTIVEは初期化方法の後にTRUEに設定されています(DoInitializedが完了しました)。 Isrunningは、Dostartが完了した後に設定されます。 dostartは、 @postconstructの注釈付きメソッドが呼び出された後に発生しているdefaultlifecycleprocessorによってトリガーされます。

Bean Bが初期化されて開始された後、ポストコンストラクトメソッドが呼び出されることを保証するにはどうすればよいですか?

役に立ちましたか?

解決

あなたの特定のケースで @PostConstruct BEAN Aの方法は、Bが完全に初期化されるまで呼び出されません。そのすべての依存関係は注入されます @PostConstruct 実行を終了します。

更新:ここで春のライフサイクル機能に依存しているので、実装できますか Lifecycle AでJMSの呼び出しを移動します start() そこに方法?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top