我正在尝试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........");
}
}
}
答案 0 :(得分:2)
此链接可能对您有所帮助:
答案 1 :(得分:1)
在上下文中显式调用ConfigurableAppicationContext.start()时发布了ContextStartedEvent
ContextRefreshedEvent可能会多次发布,因此也可能在所有bean初始化之前发布
start()是Lifecycle接口的一种方法,它由ConfigurableApplicationContext扩展并由org.springframework.context.support.AbstractApplicationContext显式实现。它主要用于支持异步处理
启动和刷新之间的区别在于:
在创建具体的ApplicationContext期间,通常会隐式调用刷新,因此我们(开发人员)更习惯于它。
start 始终是显式的 - 所以 - 如果你想获得ContextStartedEvent,你应该在ApplicationContext上调用start()。