2016-10-04 67 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()。

相關問題