#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 .