4
私はLifecycle
インターフェイスロジックを理解しようとしています。 Lifecycle
ため ドキュメントは言う:どのような条件でSpringコールライフサイクルの開始/停止フックですか?
コンテナは、例えば、各コンテナ内適用 すべてのコンポーネントに信号をスタート/ストップを伝播します停止/再起動シナリオの場合は 実行時です。
しかし、cantainerはこのメソッド(開始/停止)をまったく呼び出さないようです。
たとえば、次のコードスニペットのための結果は単一の出力 ">>コール:実行されている:false" です
@Configuration
public class TestApp implements Lifecycle {
boolean runStatus = false;
@Override
public void start() {
System.err.println(">> call: start (Lifecycle)");
runStatus = true;
}
@Override
public void stop() {
System.err.println(">> call: stop (Lifecycle)");
runStatus = false;
}
@Override
public boolean isRunning() {
System.err.println(">> call: is running: " + runStatus);
return runStatus;
}
public static void main(String[] args) {
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(TestApp.class);
ctx.stop();
}
}
P.S.私は約SmartLifecycle
について聞いて、それは正常に動作します。しかし、私はどのように正確に開始/停止方法をLifecycle
から使用できるか興味深いです。
春のドキュメントも言う:「SmartLifecycle拡張ことに注意し、ライフサイクル・インターフェースのみ他のコンポーネントでは、ライフサイクル・インターフェースはまた、検出されないので、無視ままトップレベルのシングルトン豆でサポートされていることに注意してください。インターフェイスは、アプリケーションコンテキストの起動およびシャットダウンフェーズとの統合を提供します。 設定クラスで使用しているために動作しないことがありますか? Beanクラスで試してみることをお勧めします – niekname