새소식

반응형
Java/Spring

ServletListenerRegistrationBean<T extends EventListener>

  • -
반응형

ServletListenerRegistrationBean 이란?

Spring Boot 에서 서블릿 스펙의 Listener(예: HttpSessionListener, ServletContextListener) 를 서블릿 컨테이너에

등록하기 위한 Spring Bean 이다.

 

즉, 서블릿 컨테이너가 감지할 수 있도록 Spring Bean 을 리스너로 등록해주는 중간 다리 역할을 한다.

 

🔄 동작 흐름 요약

  1. HttpSessionListener 같은 서블릿 리스너를 구현하거나 이미 구현된 클래스(HttpSessionEventPublisher) 를 사용한다.
  2. ServletListenerRegistrationBean 으로 위 클래스를 Spring Bean 으로 등록한다.
  3. Spring Boot 는 내장 톰캣(또는 서블릿 컨테이너)을 초기화할 때 해당 리스너를 컨테이너에 자동 등록한다.
  4. 등록된 리스너는 세션 생성/파괴 등의 이벤트가 발생할 때 해당 리스너가 자동으로 반응하여 호출된다.

 

🔧 예시

@Bean
public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
    return new ServletListenerRegistrationBean<>(new HttpSessionEventPublisher());
}

 

  • HttpSessionEventPublisher 는 HttpSessionListener 를 구현하고 있다.
  • Spring Boot 는 이것을 서블릿 컨테이너에 리스너로 등록한다.
  • HttpSessionEventPublisher  는 Spring Security 에서 세션 이벤트를 추적하기 위해 사용하는 리스너이다.
  • 서블릿 컨테이너에 등록된 리스너가 세션 생성/종료 시 해당 메서드의 콜백 메서드가 호출된다.

 

🔍 ServletListenerRegistrationBean 이 중요한 이유

Spring 의 일반적인 컴포넌트(@Component, @Service) 는 서블릿 컨테이너 레벨의 이벤트를 감지할 수 없다.

하지만 ServletListenerRegistrationBean 을 통해 Spring Boot 레벨에서 서블릿 레벨의 리스너를 쉽게 등록할 수 있다.

 

🧠 참고

HttpSessionListener 를 직접 구현하여 서블릿 컨테이너 레벨의 리스너를 Spring Bean으로 등록할 수 있다.

public class CustomSessionListener implements HttpSessionListener {
	
	public void sessionCreated(HttpSessionEvent se) {
		System.out.println("세션 생성됨 === "+se.toString());
    }
	
	public void sessionDestroyed(HttpSessionEvent se) {
		System.out.println("세션 종료됨 === "+se.toString());
    }
}

@Bean
public ServletListenerRegistrationBean<CustomSessionListener> sessionListener() {
    return new ServletListenerRegistrationBean<CustomSessionListener>(new CustomSessionListener());
}

 

 

반응형
Contents