春のイベント処理
あなたはすべての章で春の核心が ApplicationContext、Beanの完全なライフサイクルを管理します。ApplicationContextは、Beanをロードするときに特定のタイプのイベントを公開します。たとえば、ContextStartedEventはコンテキストの開始時に公開され、ContextStoppedEventはコンテキストの停止時に公開されます。
イベント処理のApplicationContextを介して提供されApplicationEventのクラスとApplicationListenerのインタフェース。したがって、BeanがApplicationListenerを実装している場合、ApplicationEventがApplicationContextに公開されるたびに、その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クラスHelloWorld、CStartEventHandler、CStopEventHandler、およびMainAppを作成します。 |
4 | Beans構成ファイルBeans.xmlをsrc フォルダ。 |
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のカスタムイベントを確認できます。