ContextRefreshedEvent вызывается каждый раз вместо ContextStartedEvent

#java #spring #events

#java #весна #Мероприятия

Вопрос:

Я пытаюсь ApplicationListener, но ContextRefreshedEvent каждый раз получаю вызов. Я хочу знать, когда ContextStartedEvent вызывается.

 public class CustomListener implements ApplicationListener{

    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
       if(applicationEvent instanceof ContextRefreshedEvent){
           System.out.println("<><><>refresh event......");
       }else if(applicationEvent instanceof ContextStartedEvent){
            System.out.println("<><><><>started event......");
       }else{
           System.out.println("......else........");
       }
    }

}
  

Ответ №1:

Ответ №2:

ContextStartedEvent публикуется, когда вы явно вызываете ConfigurableAppicationContext.start() в контексте

ContextRefreshedEvent может публиковаться более одного раза, и поэтому он также может быть опубликован до инициализации всех компонентов

start() — это метод интерфейса жизненного цикла, который расширяется с помощью ConfigurableApplicationContext и явно реализуется org.springframework.context.support .Абстрактное приложение Context.В основном используется для поддержки асинхронной обработки

Различие между запуском и обновлением заключается в том, что:

обновление обычно вызывается неявно во время создания конкретного ApplicationContext, поэтому мы (разработчики) к этому больше привыкли.

start всегда является явным, поэтому, если вы хотите получить ContextStartedEvent, вы должны вызвать start() для ApplicationContext .