スプリング事件


スプリング事件
本論文ではspringイベントの使い方について議論します.イベントはスプリングの中で無視されやすい機能ですが、最も有用な機能の一つです.他のspring特性と同様に、イベントリリース機能はApplication Contectから提供されます.
イベントは以下のいくつかの簡単な約束に従います.-イベントはAppliation Event-リリースクラスから引き継がれるべきです.Appplication Event Publisherオブジェクトを注入します.モニターはApplistenerインターフェースを実現するべきです.
イベントをカスタマイズ
springはカスタムイベントの作成とリリースを許可します.デフォルトではイベントは同期機構です.同期機構は、モニターが同じトランザクションコンテキストにあると発表できるような一定の利点がある.
Appleイベントの例
イベントデータを保存するための簡単なイベントクラスを作成します.この例では、イベントクラスは文字列メッセージの属性を含みます.
public class CustomSpringEvent extends ApplicationEvent {
    private String message;

    public CustomSpringEvent(Object source, String message) {
        super(source);
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}
クラスを発表
私たちはイベントリリースクラスを作成します.クラス構造のイベントオブジェクトをリリースし、対応するモニターに公開します.イベントを発表するために、リリースクラスは簡単にApplication Event Publisherオブジェクトに注入し、その後そのpublishEvent()APIを使ってイベントを発表します.
public class CustomSpringEventPublisher {
    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    public void doStuffAndPublishAnEvent(final String message) {
        System.out.println("Publishing custom event. ");
        CustomSpringEvent customSpringEvent = new CustomSpringEvent(this, message);
        applicationEventPublisher.publishEvent(customSpringEvent);
    }
}
また、リリースクラスでは、アプレックスEvent Publisher Awareインターフェースを実現し、アプリケーション起動時にアプレックスEvent Publisherオブジェクトを注入することもできます.通常は@Autowire注解を使って注入するほうが簡単です.
モニター
最後にモニターを作成します.モニターだけが必要なのはAppliation Listenerインターフェースを実現するbeanであれば良いです.
@Component
public class CustomSpringEventListener implements ApplicationListener<CustomSpringEvent> {
    @Override
    public void onApplicationEvent(CustomSpringEvent event) {
        System.out.println("Received spring custom event - " + event.getMessage());
    }
}
私達のカスタムモニターはカスタムイベントの汎型を使ってパラメータ化を実現しています.これは、特定のイベントのためのオブジェクトのインスタンスおよびタイプ変換をチェックしなければならないことを回避する.
前に述べたように、デフォルトのspringイベントは同期されています.ドStuffAndPublish AnEvent()方法は、モニターがイベント処理を完了するまでブロックされています.
非同期イベントを作成
いくつかのシーンでは、同期メカニズムのリリースイベントは、我々のニーズを満たすことができません.exectourを持つApplication Event Multicaster beanを作成することによって、非同期機構を開く.次にSimpleAsyncTaskExectorを定義します.
@Configuration
public class AsynchronousSpringEventsConfig {
    @Bean(name = "applicationEventMulticaster")
    public ApplicationEventMulticaster simpleApplicationEventMulticaster() {
        SimpleApplicationEventMulticaster eventMulticaster 
          = new SimpleApplicationEventMulticaster();

        eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
        return eventMulticaster;
    }
}
イベント、リリースクラス、およびモニター実装は、以前の例と同じであるが、現在は、モニタは、異なるスレッドでイベントを処理するために非同期的な方法を採用する.
スプリングフレーム内蔵イベント
spring自身はデフォルトでは、様々な内蔵イベントを発表します.例えば、Appleication Conteetは、Contect RefreshedEvent、Contect StartEvent、Request HandledEventなどのフレームワークイベントをトリガします.
これらのイベントは、アプリケーション開発者に対して、アプリケーションのライフサイクルとコンテキストを関連付けることができ、必要に応じてカスタマイズロジックを追加します.以下の例は、コンテキストリフレッシュイベントを傍受することです.
public class ContextRefreshedListener 
  implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent cse) {
        System.out.println("Handling context re-freshed event. ");
    }
}
締め括りをつける
本論文では、springイベントの処理メカニズムを紹介します.カスタムイベントの作成、イベントの発表、およびモニターでイベントを処理します.非同期処理イベントの構成も簡単に紹介した.