ApplicationContext не запускает lifecycle бины

97
02 декабря 2020, 11:30

public static void main:

ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("conf.xml");
ctx.start()

В conf.xml:

<bean id="lifeBean" class="LifeBean"/>

В LifeBean.java

public class LifeBean implements Lifecycle {
  private boolean isRunning=true;
  @Override
  public void start() {
    System.out.println("Start");
  }
  @Override
  public void stop() {
    System.out.println("Stop");
  }
  @Override
  public void isRunning() {
    return isRunning;
  }
}

В вывод идет

INFO: Starting beans in phase 0.

Но нет вывода методов start и stop.

Как это должно работать? Хотелось бы увидеть пример, в котором был бы вывод методов start и stop в консоль, если это конечно возможно, а то я возможно не так понимаю принцип использования Lifecycle.

Answer 1

Метод start не вызывается, т.к. isRunning возвращает всегда true (что логично - зачем запускать бин, если он и так запущен?). Исправить это можно, инициализировав isRunning со значением false и изменяя её значение в методах start и stop.

Метод stop не вызывается, в свою очередь, из-за отсутствия вызова метода stop контекста. Исправить это можно, вызвав stop контекста, либо используя try-with-resources.

READ ALSO
Как определить текущее время в int

Как определить текущее время в int

Имеется несколько кнопокНа каждой кнопке должен быть текст в формате HH:mm, где HH - количество часов в данный момент времени + некоторое количество...

131
Проблема с отрисовкой в java на android

Проблема с отрисовкой в java на android

Недавно я с программирования приложений на java для android перешёл на игрыИ тут же возникла очень большая проблема: при первом заходе в игру всё...

137
Как с помощью JS определить ip пользователя?

Как с помощью JS определить ip пользователя?

Хочу сделать так что бы JS определял Ip пользователя при запуске скрипта, но не знаю как это сделатьПодскажете?

118