목표

  • SpringApplicationEvent 가 무엇인지 알아본다.
  • SpringApplicationEvent 의 사용법을 알아본다.

SpringApplication.run()

@SpringBootApplication  
public class AccountCoreApplication {  
	public static void main(String[] args) {  
		SpringApplication.run(AccountCoreApplication.class, args);  
	}  
}
  • Spring Boot를 사용하면 main 메서드에 다음과 같은 함수를 호출하는 것을 볼 수 있다.

  • run 메서드를 호출하면 SpringApplication 생성자를 호출하는 것을 확인할 수 있다.

  • SpringApplication 생성자를 호출하면 ApplicationListener를 로드하여 등록하게 된다.

ApplicationListener

  • 관심이 있는 이벤트에 대한 ApplicationListenerApplicationContext에 등록하면 ApplicationEvent가 그에 따라 필터링되고, 일치하는 이벤트에 대해서만 Listener가 호출이 된다.
  • ApplicationEvent는 이벤트를 나타내는 추상화 클래스다.
  • 사용자가 ApplicationEvent를 구현하여 이벤트를 publish하고 handling할 수 있다.
  • Spring Boot에서는 ApplicationEvent를 구현한 SpringApplicationEvent 추상화 클래스를 만들었다.
    • SpringApplicationEvent의 종류

ApplicationListener 등록 방법

  • 일반적으로 사용할 수 있는 ApplicationListener를 등록 방법은 2가지다.
    • @EventListener 애너테이션을 통한 listener 등록 방법
    • ApplicationListner 인터페이스 구현 및 Bean으로 등록 방법
  • 하지만 SpringApplicationEvent 중 일부(ApplicationEnvironmentPreparedEvent 등) event는 Spring 자동 구성 및 빈 생성이 되기 전에 발생한다.
    • 따라서 애노테이션이나 Bean 등록 방법 대신 SpringApplication::addListner 메서드를 통해서 등록해야된다.

참고 자료