Spring ApplicationListenerリスナーによるイベントのトリガー


参照先:https://blog.csdn.net/liyantianmin/article/details/81017960
コンテナにApplicationListener Beanがある場合、ApplicationContextがApplicationEventを発行するたびに、ApplicationListener Beanが自動的にトリガーされます.このイベントメカニズムには、プログラム表示のトリガが必要です.スプリングにはいくつかの内蔵イベントがあり、ある操作が完了するといくつかのイベントアクションが発行されます.たとえば、ContextRefreshedEventイベントをリスニングすると、すべてのbeanが初期化されてマウントに成功するとイベントがトリガーされ、ApplicationListenerインタフェースがリスニング動作を受信し、独自の論理を書くことができます.同様に、イベントはカスタマイズ、リスニング、カスタマイズでき、完全に自分のビジネスロジックに基づいて処理されます.
シーケンス番号
組み込みイベント
説明
1
ContextRefreshedEventApplicationContext
初期化またはリフレッシュされると、イベントがパブリッシュされます.これはまた、refresh()メソッドを使用してC o f i g u r a b eApplicationContextインタフェースで発生することもできます.ここでの初期化とは、すべてのBeanが正常にマウントされ、後処理Beanが検出されてアクティブ化され、すべてのSingleton Beanが事前にインスタンス化され、ApplicationContextコンテナが使用可能になったことを意味します.
2
ContextStartedEvent
このイベントは、C o n f i g u r a bleApplicationContext(ApplicationContextサブインタフェース)インタフェースのstart()メソッドを使用してApplicationContextを起動するとパブリッシュされます.データベースを調べたり、このイベントを受信した後に停止したアプリケーションを再起動したりすることができます.
3
ContextStoppedEvent
このイベントは、C o n f i g u r a bleApplicationContextインタフェースのstop()を使用してApplicationContextを停止すると発行されます.この事件を受け入れた後、必要な整理作業をすることができます.
4
ContextClosedEvent
このイベントは、C o n f i g u r a bleApplicationContextインタフェースのclose()メソッドを使用してApplicationContextを閉じるとパブリッシュされます.閉じたコンテキストがライフサイクルの末端に達します.リフレッシュまたは再起動できません.
5
RequestHandledEvent
これは、すべてのbean HTTPリクエストがサービスされていることを示すweb-specificイベントです.DispatcherServiceletを使用するWebアプリケーションにのみ適用できます.SpringをフロントエンドのMVCコントローラとして使用する場合、Spring処理ユーザ要求が終了すると、自動的にイベントがトリガーされます.
リスニングイベントインタフェースの実装例
たとえば、ContextRefreshedEventをリスニングする場合は、ApplicationListenerインタフェースを実装し、リスニングするイベントを送信できます.
@Component
public class TestApplicationListener implements ApplicationListener<ContextRefreshedEvent>{
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        System.out.println(contextRefreshedEvent);
        System.out.println("TestApplicationListener............................");
    }
}

カスタムリスニングイベントは、イベントをカスタマイズし、ビジネス処理が完了したら手動で発行できます.リスニングインタフェースを統合し、イベントを受信してビジネス処理を行う
イベント定義:
public class EmailEvent extends ApplicationEvent{
   private String address;
   private String text;
   public EmailEvent(Object source, String address, String text){
   super(source);
      this.address = address;
      this.text = text;
   }
   public EmailEvent(Object source) {
     super(source);
   }
   //......address text setter、getter
}

リスニング定義:
public class EmailNotifier implements ApplicationListener{
   public void onApplicationEvent(ApplicationEvent event) {
     if (event instanceof EmailEvent) {
        EmailEvent emailEvent = (EmailEvent)event;
        System.out.println("    :" + emailEvent.getAddress());
        System.our.println("    :" + emailEvent.getText());
     } else {
        System.our.println("      :" + event);
     }
   }
}

ビジネストリガ
public class SpringTest {
   public static void main(String args[]){
     ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
     //    ApplicationEvent  
     EmailEvent event = new EmailEvent("hello","[email protected]","This is a test");
     //       
     context.publishEvent(event);
   }
}

ApplicationListenerを実装するクラスをbeanとして定義する必要があります