Spring Framework는 Event 와 Event가 발행되었을때 이를 처리하는 EventHandler(Listener)기능을 지원한다. Event 와 Listener 모두 사용자가 직접 정의하고 발행 할 수 있다. 사용자 정의 Event 외에도 기본적으로 제공하는 Event 가 존재하며, Spring Application 의 동작과 관련해서는 ApplicationEvent 가 존재한다.
따라서 Spring 이 시작할때 어떤 코드를 실행하고 싶다면 ApplicationEvent 클래스 중 시작과 관련된 Event인 ContextRefreshedEvent를 수신하는 Listener를 정의 하면 된다.
@Component
@Slf4j
public class ApplicationEventListener {
@EventListener({ContextRefreshedEvent.class})
public void handleRefreshEvent() {
log.info("ApplicationContext is ready!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
// Spring 시작시 ApplicationContext is ready!!!!!!!!!!!!!!!!!!!!!!!!!!! 로그가 보인다.
}
ContextRefreshedEvent 외에도 몇가지 Event 들이 존재 한다.
- ContextRefreshedEvent
ApplicationContext가 초기화 또는 새로 고침(ConfigurableApplicationContext.refresh()) 될 때 발행된다.
여기서 초기화 란 모든 빈이 로드되고, 후 처리기(post-processor) 빈이 감지되고 활성화되고, 싱글톤이 사전 인스턴스화되고, ApplicationContext 객체가 사용할 준비가된 것을 의미 한다. - ContextStartedEvent
ApplicationContext가 ConfigurableApplicationContext.start () 메소드를 사용하여 시작될 때 발행된다.
일반적으로이 명시적으로 중지 한 후에 빈을 다시 시작하거나 초기화 시에 시작되지 않은 콤포넌트를 시작하는경우에도 발행된다. - ContextStoppedEvent
ApplicationContext가 ConfigurableApplicationContext.stop() 메소드를 사용하여 중지 될 때 발행된다. - ContextClosedEvent
Application 이 ConfigurableApplicationContext.close() 메소드를 사용하거나 JVM 종료 후크를 통해 닫힐 때 발행된다. - RequestHandledEvent
HTTP 요청이 서비스되었음을 모든 빈에 알리는 이벤트. 이 이벤트는 요청이 완료된 후에 발행되며, DispatcherServlet을 사용하는 웹 애플리케이션에만 적용된다. - ServletRequestHandledEvent
RequesHandledEvent의 하위 클래스로 RequestHandler의 내용에 Servlet 과 관련된 내용들(URL, method, servletName, statusCode 등) 이 추가로 포함 되어 있다.
참고
반응형
'Java' 카테고리의 다른 글
Java - Json(ObjectMapper) 배열(Collection) 타입이지만, 데이터가 1개인 경우 Object로 작성되는 배열 필드 처리하기 (0) | 2023.11.17 |
---|---|
(spring boot 3.1 이상) 간단한 설정(@ServiceConnection)으로 testcontainer 사용하기 (0) | 2023.10.16 |
Java - LocalDateTime (LocalDate, LocalTime), ZonedDateTime, Period, Duration (0) | 2023.09.17 |
Java Record (레코드) (0) | 2023.09.10 |
Java Optional 사용법 (0) | 2023.09.03 |