В каком состоянии пружинные крючки запуска/остановки жизненного цикла вызова?
Я пытаюсь понять логику интерфейса 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(); } }