0

デフォルトの Bean 初期化戦略は、次のログに記録されます。

[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.Instance> setBeanName() asda
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsa, message: create()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsa, message: start()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: create()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: start()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: stop()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: destroy()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsa, message: stop()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsa, message: destroy()

start() メソッドが呼び出された後、Bean は完全に初期化されたと見なされます。ここでやりたいことは、すべての Bean を同期的に初期化することです。他のすべての Bean がそのステップで完了する前に、どの Bean も次の初期化ステップに進むことはありません。結果のログは次のようになります。

[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.Instance> setBeanName() asda
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsa, message: create()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: create()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsa, message: start()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread main, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: start()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsa, message: stop()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: stop()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsa, message: destroy()
[Wed Sep 26 13:10:35 CEST 2012]: <Thread Thread-1, Class is.test.spring.ExecutableImpl> ID: fdsaa, message: destroy()

どうすればこれを達成できるかについてのアイデアはありますか?

また、バックグラウンド スレッドですべての初期化 (すべての Bean のすべてのライフサイクル ステップ) を処理することは可能でしょうか? 初期化にはかなり時間がかかると思います...

4

1 に答える 1

0

どうすればこれを達成できるかについてのアイデアはありますか?

<bean depends-on="..."/>記法を使用するか、注釈 org.springframework.context.annotation.DependsOn を使用して、Spring ライフサイクルを管理できます。

また、バックグラウンド スレッドですべての初期化 (すべての Bean のすべてのライフサイクル ステップ) を処理することは可能でしょうか?

Bean の init() または destroy() メソッドで (InitializingBean/DisposableBean または PostConstruct/PreDestroy を介して)、初期化/破棄するために別のスレッドを作成できます。

于 2012-09-27T12:53:35.440 に答える