liguofeng29’s blog

個人勉強用ブログだっす。

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機能で利用される。