Spring4 - イベント通知仕組みサンプル
ApplicationContextによるイベント通知仕組み
1.ApplicationEventのサブクラスを実装する
package app.event; import org.springframework.context.ApplicationEvent; public class SampleEvent extends ApplicationEvent { public SampleEvent(Object source) { super(source); } }
2.ApplicationListenerを実装する
package app.event; import org.springframework.context.ApplicationListener; public class SampleEventNotifier implements ApplicationListener<SampleEvent> { @Override public void onApplicationEvent(SampleEvent paramE) { System.out.println("SampleEvent発生を受信しました。"); } }
3.リスナーを登録する
※ApplicationListenerの実装を設定するだけでコンテナーのリスナーとして登録する
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- リスナー登録 --> <bean class="app.event.SampleEventNotifier" /> </beans>
4.テストクラス
package app.event; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestEvent { public static void main(String[] args) { @SuppressWarnings("resource") ApplicationContext context = new ClassPathXmlApplicationContext("beanEvent.xml"); SampleEvent event = new SampleEvent("test spring event"); // イベント発信 context.publishEvent(event); } }
SampleEvent発生を受信しました。
Springは以下のようなEventを提供している
- ContextRefreshedEvent : ApplicationContextの初期化Orリフレッシュ
- ContextStartedEvent : ConfigurableAppliactionContext(ApplicationContextのサブIF)のstart()
- ContextClosedEvent : ConfigurableAppliactionContext(ApplicationContextのサブIF)のclose()
- ContextStoppedEvent : ConfigurableAppliactionContext(ApplicationContextのサブIF)のstop()
- RequestHandledEvent : Webアプリでリクエスト処理後
Spring4.0.3から SessionconnectEvent, SessionConnectEvent, SessionDisconnectEventを提供し、SpringのWebSocket機能で利用される。