Event Handling in Spring
S.N. | Spring Built-in Events & Description |
---|---|
1 | ContextRefreshedEvent ApplicationContext가 초기화 또는 갱신(refresh)되면 발생한다. 이 event는 ConfigurableApplicationContext interface의 refresh()함수를 사용하여 발생시킬 수 있다. |
2 | ContextStartedEvent ConfigurableApplicationContext interface의 start() 함수를 사용하여 ApplicationContext가 실행되어지면 발생한다. 이것으로 database를 점검(poll)하거나 이 event를 수신한 이후 어떤 정지(stop)된 프로그램을 시작/재시작할 수 있다. |
3 | ContextStoppedEvent ConfigurableApplicationContext interface의 stop() 함수를 사용하여 ApplicationContext가 정되었을 때 발생한다. 이 event 수신 이후 필요한 정리작업(housekeep work)를 할 수 있다. |
4 | ContextClosedEvent ConfigurableApplicationContext interface의 close() 함수를 사용하여 ApplicationContext가 종료(close)되었을 때 발생한다. 종료된 context는 lifecycle의 끝에 도달한다 - 이것은 갱신 혹은 재시작할 수 없다. |
5 | RequestHandledEvent 제공한다 HTTP request가 서비스되어졌다는 것을 모든 bean에게 알려주는 web한정(web-specific) event이다. |
Listening to Context Events:
HelloWorld.java:
package com.tutorialspoint; public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); } }
CStartEventHandler.java: AppicationListener interface를 구현하였다 - <ContextStartedEvent>에 의해 위 표준 event중 'ContextStartedEvent'를 수신하게 된다.
package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStartedEvent; public class CStartEventHandler implements ApplicationListener<ContextStartedEvent>{ public void onApplicationEvent(ContextStartedEvent event) { System.out.println("ContextStartedEvent Received"); } }
CStopEventHandler.java: AppicationListener interface를 구현하였다 - <ContextStoppedEvent>에 의해 위 표준 event중 'ContextStoppedEvent'를 수신하게 된다.
package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStoppedEvent; public class CStopEventHandler implements ApplicationListener<ContextStoppedEvent>{ public void onApplicationEvent(ContextStoppedEvent event) { System.out.println("ContextStoppedEvent Received"); } }
MainApp.java: ApplicationContext가 아닌 ConfigurableApplicationContext를 이용하고 있음에 주의하라. context생성 후 context.start()/stop()에 의해 event가 발생한다.
package com.tutorialspoint; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); // Let us raise a start event. context.start(); HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); obj.getMessage(); // Let us raise a stop event. context.stop(); } }
Beans.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="helloWorld" class="com.tutorialspoint.HelloWorld"> <property name="message" value="Hello World!"/> </bean> <bean id="cStartEventHandler" class="com.tutorialspoint.CStartEventHandler"/> <bean id="cStopEventHandler" class="com.tutorialspoint.CStopEventHandler"/> </beans>
실행 결과는 다음과 같다.
ContextStartedEvent Received Your Message : Hello World! ContextStoppedEvent Received