春のイベント処理

あなたはすべての章で春の核心が ApplicationContext、Beanの完全なライフサイクルを管理します。ApplicationContextは、Beanをロードするときに特定のタイプのイベントを公開します。たとえば、ContextStartedEventはコンテキストの開始時に公開され、ContextStoppedEventはコンテキストの停止時に公開されます。

イベント処理のApplicationContextを介して提供されApplicationEventのクラスとApplicationListenerのインタフェース。したがって、BeanがApplicationListenerを実装している場合、ApplicationEventApplicationContextに公開されるたびに、そのBeanに通知されます。

Springは次の標準イベントを提供します-

シニア番号 春のビルトインイベントと説明
1

ContextRefreshedEvent

このイベントは、ApplicationContextが初期化または更新されたときに公開されます。これは、ConfigurableApplicationContextインターフェイスのrefresh()メソッドを使用して発生させることもできます。

2

ContextStartedEvent

このイベントは、ConfigurableApplicationContextインターフェイスのstart()メソッドを使用してApplicationContextが開始されたときに公開されます。このイベントを受信した後、データベースをポーリングするか、停止したアプリケーションを再起動できます。

3

ContextStoppedEvent

このイベントは、ConfigurableApplicationContextインターフェイスでstop()メソッドを使用してApplicationContextが停止されたときに公開されます。このイベントを受け取った後、必要なハウスキーピング作業を行うことができます。

4

ContextClosedEvent

このイベントは、ConfigurableApplicationContextインターフェイスでclose()メソッドを使用してApplicationContextが閉じられたときに公開されます。閉じたコンテキストは寿命に達します。更新または再起動することはできません。

5

RequestHandledEvent

これは、HTTPリクエストが処理されたことをすべてのBeanに通知するWeb固有のイベントです。

Springのイベント処理はシングルスレッドであるため、イベントが公開された場合、すべての受信者がメッセージを受信するまで、プロセスはブロックされ、フローは続行されません。したがって、イベント処理を使用する場合は、アプリケーションを設計するときに注意が必要です。

コンテキストイベントを聞く

コンテキストイベントをリッスンするには、Beanはメソッドが1つしかないApplicationListenerインターフェースを実装する必要がありますonApplicationEvent()。それでは、イベントがどのように伝播するか、特定のイベントに基づいて必要なタスクを実行するためにコードを配置する方法を確認するための例を書いてみましょう。

動作するEclipseIDEを配置し、次の手順を実行してSpringアプリケーションを作成しましょう-

ステップ 説明
1 SpringExampleという名前のプロジェクトを作成し、の下にパッケージcom.tutorialspointを作成します。src 作成したプロジェクトのフォルダ。
2 Spring Hello Worldの例の章で説明されているように、[外部JARの追加]オプションを使用して必要なSpringライブラリを追加します。
3 com.tutorialspointパッケージの下にJavaクラスHelloWorldCStartEventHandlerCStopEventHandler、およびMainApp作成します。
4 Beans構成ファイルBeans.xmlsrc フォルダ。
5 最後のステップは、すべてのJavaファイルとBean構成ファイルのコンテンツを作成し、以下で説明するようにアプリケーションを実行することです。

これがの内容です 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 ファイル

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 ファイル

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 ファイル

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>

ソースとBeanの構成ファイルの作成が完了したら、アプリケーションを実行しましょう。アプリケーションに問題がない場合は、次のメッセージが出力されます-

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

必要に応じて、独自のカスタムイベントを公開し、後で同じイベントをキャプチャして、それらのカスタムイベントに対してアクションを実行できます。独自のカスタムイベントの作成に興味がある場合は、Springのカスタムイベントを確認できます。