Spring3.0.2を使用しています。私は2つの比較的単純なBeanの定義を持っています。1つには@PostConstruct(bean'A')があり、これは@DependsOn Bean(bean'B')の準備が必要な一連のイベントをトリガーします。ただし、Bean'A'はBean'B'に依存していると述べたにもかかわらず、Bean'B'が完全に初期化される前にBean'A'のイベント(ライフサイクルメソッド)が実行されているようです。
Beanが@DependsOnを介して「依存」している(または、さらに言えば、Bean定義では依存している)ということは、依存Beanのライフサイクルメソッドが、そのBeanに依存しているBeanの前に完了することを意味しますか?
Bean'B'のライフサイクルメソッドは、Bean' A'の前に完了しますか?
アップデート
Bean Aは、JMSテンプレートを使用して、初期化したことを通知するメッセージを送信するカスタムクラスです。
上記のメッセージの受信者はメッセージを処理し、その構成をMessageListeningContainer(Bean B)に転送します。
最初の部分は、BeanBが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>
initメソッドに、Beanbのインジェクションと2つのロギングステートメントを追加しました。
container.isRunning();
container.isActive();
スプリングソースを調べたところ、Initializationメソッドの後でisActiveがtrueに設定されています(doInitializedが完了しました)。isRunningは、doStartが完了した後に設定されます。doStartは、@PostConstruct注釈付きメソッドが呼び出された後に発生するDefaultLifecycleProcessorによってトリガーされます。
Bean bが初期化されて開始された後、Postconstructメソッドが呼び出されることをどのように保証できますか?