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_PHASESmartLifecycle のデフォルトのフェーズ: 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)