public interface SmartLifecycle extends Lifecycle, Phased
ApplicationContext
のリフレッシュやシャットダウン時に開始する必要があるオブジェクト用の Lifecycle
インターフェースの拡張。isAutoStartup()
戻り値は、コンテキストのリフレッシュ時にこのオブジェクトを開始する必要があるかどうかを示します。コールバックを受け入れる stop(Runnable)
メソッドは、非同期シャットダウンプロセスを持つオブジェクトに役立ちます。このインターフェースのいずれかの実装では、全体的な ApplicationContext
のシャットダウン時に不必要な遅延を回避するために、シャットダウン完了時にコールバックの run()
メソッドを呼び出す必要があります。
このインターフェースは Phased
を継承し、getPhase()
メソッドの戻り値は、この Lifecycle
コンポーネントが開始および停止されるフェーズを示します。起動プロセスは、 最小の位相値で始まり、 最大の位相値で終了します(Integer.MIN_VALUE
が可能な限り低い、Integer.MAX_VALUE
が可能な限り高い)。シャットダウンプロセスでは、逆の順序が適用されます。同じ値を持つコンポーネントは、同じフェーズ内で任意に順序付けられます。
サンプル: コンポーネント B がコンポーネント A がすでに起動していることに依存している場合、コンポーネント A はコンポーネント B よりも低い位相値を持つ必要があります。シャットダウンプロセス中、コンポーネント B はコンポーネント A の前に停止します。
明示的な「依存」関連は、依存 Bean が常に依存関連の後に開始し、依存関連の前に常に停止するように、フェーズの順序よりも優先されます。
コンテキスト内の SmartLifecycle
を実装していない Lifecycle
コンポーネントは、位相値が 0
であるかのように扱われます。これにより、SmartLifecycle
コンポーネントが負の位相値を持つ場合は、SmartLifecycle
コンポーネントが Lifecycle
コンポーネントよりも前に開始し、SmartLifecycle
コンポーネントが正の位相値を持つ場合は、SmartLifecycle
コンポーネントが Lifecycle
コンポーネントよりも後に開始することができます。
SmartLifecycle
の自動起動サポートにより、SmartLifecycle
Bean インスタンスは通常、アプリケーションコンテキストの起動時に初期化されることに注意してください。結果として、Bean 定義の lazy-init フラグは、SmartLifecycle
Bean に対する実際の効果を非常に限定しています。
LifecycleProcessor
, ConfigurableApplicationContext
修飾子と型 | フィールドと説明 |
---|---|
static int | DEFAULT_PHASE SmartLifecycle のデフォルトのフェーズ: Integer.MAX_VALUE 。 |
修飾子と型 | メソッドと説明 |
---|---|
default int | getPhase() このライフサイクルオブジェクトが実行されるはずのフェーズを返します。 |
default boolean | isAutoStartup() |
default void | stop(RunnableSE callback) Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。 |
static final int DEFAULT_PHASE
SmartLifecycle
のデフォルトのフェーズ: Integer.MAX_VALUE
。 これは、通常の Lifecycle
実装に関連付けられている共通フェーズ 0
とは異なり、通常は自動起動される SmartLifecycle
Bean を後の起動フェーズと前のシャットダウンフェーズに入れます。
getPhase()
, DefaultLifecycleProcessor.getPhase(Lifecycle)
, 定数フィールド値 default boolean isAutoStartup()
true
が含まれる ApplicationContext
がリフレッシュされるときに、この Lifecycle
コンポーネントがコンテナーによって自動的に開始される場合、true
を返します。false
の値は、プレーン Lifecycle
実装に類似した、明示的な Lifecycle.start()
呼び出しを介してコンポーネントが開始されることを意図していることを示します。
デフォルトの実装は true
を返します。
default void stop(RunnableSE callback)
提供されたコールバックは、LifecycleProcessor
によって使用され、共通のシャットダウン順序値を持つすべてのコンポーネントの順序付けられた、潜在的に同時のシャットダウンをサポートします。コールバック は、SmartLifecycle
コンポーネントが実際に停止した後に実行する必要があります。
LifecycleProcessor
は、stop
メソッドのこのバリアントのみを呼び出します。つまり、SmartLifecycle
実装では、このメソッドの実装内に明示的に委譲されない限り、Lifecycle.stop()
は呼び出されません。
デフォルトの実装は Lifecycle.stop()
に委譲し、呼び出しスレッドで指定されたコールバックをすぐにトリガーします。2 つの間に同期がないことに注意してください。カスタム実装では、少なくとも共通のライフサイクルモニター(存在する場合)内に同じ手順を入れたい場合があります。
Lifecycle.stop()
, getPhase()
default int getPhase()
デフォルトの実装は、通常の Lifecycle
実装の後に stop()
コールバックを実行させるために、DEFAULT_PHASE
を返します。
Phased
の getPhase
isAutoStartup()
, Lifecycle.start()
, stop(Runnable)
, DefaultLifecycleProcessor.getPhase(Lifecycle)