2016-10-04 130 views
0

我在尝试ApplicationListener,但每次都调用ContextRefreshedEvent。我想知道何时调用ContextStartedEventContextRefreshedEvent每次调用而不是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

ContextStartedEvent发布,当你明确的情况下调用ConfigurableAppicationContext.start()

ContextRefreshedEvent可公布一次以上,并且因此可能所有的豆子都被初始化之前也发表

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

区别在于:

刷新通常创建具体的ApplicationContext时隐式调用,所以我们(开发商)都比较习惯了。

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

相关问题