В каком состоянии пружинные крючки запуска/остановки жизненного цикла вызова?
Я пытаюсь понять логику интерфейса Lifecycle
.
Документация для Lifecycle
гласит:
Контейнеры будут распространять сигналы запуска / остановки на все компоненты, которые применитесь внутри каждого контейнера, например для сценария остановки / перезапуска на во время выполнения.
Но, похоже, что cantainer вообще не вызывает эти методы (start/stop).
Например, результатом для следующего фрагмента кода является только один вывод "> > call: is running: 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
и это прекрасно работает. Но мне интересно, как мы можем правильно использовать методы start/stop из Lifecycle
.
1 ответ:
Вы должны вручную
start()
иstop()
контекст.@Configuration public class TestApp implements Lifecycle { boolean runStatus = false; public TestApp (){} @Bean public TestApp testApp(){ return new TestApp(); } @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.start(); TestApp ta = ctx.getBean(TestApp.class); ctx.stop(); } }