ContextRefreshedEvent每次调用而不是ContextStartedEvent

时间:2016-10-04 07:15:01

标签: java spring events

我正在尝试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........");
       }
    }

}

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

在上下文中显式调用ConfigurableAppicationContext.start()时发布了ContextStartedEvent

ContextRefreshedEvent可能会多次发布,因此也可能在所有bean初始化之前发布

start()是Lifecycle接口的一种方法,它由ConfigurableApplicationContext扩展并由org.springframework.context.support.AbstractApplicationContext显式实现。它主要用于支持异步处理

  

启动和刷新之间的区别在于:

     在创建具体的ApplicationContext期间,通常会隐式调用

刷新,因此我们(开发人员)更习惯于它。

     

start 始终是显式的 - 所以 - 如果你想获得ContextStartedEvent,你应该在ApplicationContext上调用start()。