23.5 어플리케이션 이벤트와 리스너들
SpringApplication
은 ContextRefreshedEvent
와 같은 스프링 프레임워크가 발생시키는 이벤트들과 더불어 몇몇 추가적인 어플리케이션 이벤트들을 발생시킨다.
몇몇 이벤트들은 |
Application 이벤트들은 실행시 다음과 같은 순서대로 발생한다.
ApplicationStartingEvent
은 실행은 시작했지만 등록된 리스너들과 Initializer들의 등록을 제외한 어떤 것도 진행 되기 전에 전송된다.ApplicationEnvironmentPreparedEvent
은 Context에서 사용될Environment
을 찾았지만 아직 Context가 생성되기 전에 전송된다.ApplicationPreparedEvent
은 정의된 빈들이 로딩되고 refresh가 시작되기 바로전에 전송된다.ApplicationReadyEvent
는 refresh되고 관련 callback 들이 진행 된 이후에 전송된다. 이 시점은 어플리케이션이 요청에 대해서 서비스할 준비 되었음을 가리킨다.ApplicationFailedEvent
은 시작 도중 예외가 발생하면 전송된다.
어플리케이션 이벤트들을 사용할 필요가 없는 경우가 자주있다. 그러나 이벤트들을 알고 있으면 훨씬 편리할 수있다. 내부적으로 스프링 부트는 많은 일들을 처리하기 위해 이벤트들을 사용한다.
어플리케이션 이벤트들은 스프링 프레임워크의 이벤트 발생 메카니즘을 사용해 전송된다. 이 메카니즘에서는 자식 컨텍스트의 리스너들에게 발생한 이벤트는 조상 컨텍스트들의 리스너에게도 발생되도록 한다. 이 결과로 만약 어플리케이션이 SpringApplication
객체의 계층관계를 사용한다면 리스너는 같은 타입의 어플리케이션 이벤트 객체들을 여러개 받게 된다.
리스너가 자신의 컨텍스트에서 발생한 이벤트인지 자식 컨텍스트에서 발생한 이벤트인지를 구별하게 하기 위해, 그것의 어플리케이션 컨텍스트를 주입받아서 이벤트가 발생한 Context와 비교해야 한다. 컨텍스트는 ApplicationContextAware
를 구현하거나 리스너가 빈일 경우 @Autowired
를 사용해서 주입받을 수있다.
Last updated