0.8、Springソース学習——Springでのイベントの公開と処理


文書ディレクトリ
  • 前言
  • Springにおけるオブザーバーパターン
  • Springイベント関連クラス/インタフェース紹介
  • マルチイベントプロセッサ
  • Springで重要ないくつかの重要なイベントクラス
  • イベントリスナークラス
  • カスタムイベントパブリケーションとリスニング
  • カスタムリスナー
  • カスタムイベント
  • カスタムイベントのパブリケーション(効果表示
  • )
  • 延長-ApplicationListenerとサーブレットContextListener
  • 参照リンク
  • 前言
    SpringアプリケーションContext refresh()メソッドの論理の最後に、登録イベントパブリッシャと登録リスナーの操作があり、refresh()が終了すると、イベントが発行される.Springは、あるイベントが発生すると、他の注目者のイベントを引き起こすことを可能にする.
    Springでのオブザーバーモード
    refresh()メソッドは、マルチイベントプロセッサの登録、イベントリスナーの登録を完了する.これはSpringの設計モードにおける観察者モードに対する実践である.イベントの発行後、マルチイベントプロセッサは、登録されたすべてのイベントリスナーにイベントを通知する責任を負う.
    Springイベント関連クラス/インタフェースの紹介
    マルチイベントプロセッサ
    イベントパブリッシュのコードロジック内部ではマルチイベントプロセッサが取得され、イベントプロセッサはすべてのSpringリスナーオブジェクトを取得し、次にリスナーオブジェクトを順次呼び出す方法デフォルトのマルチイベントプロセッサはrefresh()メソッドでアプリケーションContextオブジェクトを初期化するプロセスで作成されます.具体的なクラスは
    org.springframework.context.event.SimpleApplicationEventMulticaster
    

    Springで重要ないくつかの重要なイベントクラス
    SpringのアプリケーションContextのイベントには、次のいくつかのContextClosed Event ContextRefreshedEvent refresh()メソッドでContextStartedEvent ContextStopppedEventを呼び出します.
    イベントリスナークラス
    インタフェースApplicationListener上書きを実現する必要があるonApplicationEventメソッドrefresh()メソッドに実装されたjavaをすべてインスタンス化して登録する.util.EventListener. ApplicationListenerのbean
    カスタムイベントのパブリケーションとリスニング
    Springでは、イベント、リスナーをカスタマイズし、イベントのパブリッシュを行うことができます.以下に例を示します.
    カスタムリスナー
    カスタムListenerは、インタフェースApplicationListenerを実装する必要があります.
    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextRefreshedEvent;
    import org.springframework.stereotype.Component;
    @Component
    public class MyListener implements ApplicationListener<ApplicationEvent> {
    	@Override
    	public void onApplicationEvent(ApplicationEvent event) {
    		System.out.println("        :"+event.getClass());
    		if(event instanceof ContextRefreshedEvent) {
    			System.out.println("    : applicationContext      ");
    		}	
    	}
    }
    

    カスタムイベント
    ApplicationEventクラスの実装が必要
    import org.springframework.context.ApplicationEvent;
    /**
     *      
     * */
    public class MyEvent extends ApplicationEvent {
    	private static final long serialVersionUID = 1L;
    	public MyEvent(Object source) {
    		super(source);
    	}
    }
    

    カスタムイベントのパブリケーション(効果表示)
    ツールバーの
    public static void main(String[] args) {
    		//      ,   applicationContext   
    		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:applicationContext2.xml");
    		//   applicationContext        
    		applicationContext.publishEvent(new MyEvent(applicationContext));
    	}
    
  • xmlファイル内容
  • <bean class="com.bestcxx.test.MyListener">bean> 
    
  • 試験結果
  •         :class org.springframework.context.event.ContextRefreshedEvent
            :class com.bestcxx.test.MyEvent
    

    延長-ApplicationListenerとServiceletContextListener
    両者ともリスナーに関するインタフェースであり、異なる点は.ApplicationListenerはSpringイベントのListenerクラスが実現するインタフェースに属する.サーブレットContextListenerは、サーブレットイベントのListenerクラスが実現するインタフェースに属する.具体的な応用から言えば、サーブレットContextListenerの呼び出しはservletプロジェクトにあり、例えばservletプロジェクトの起動段階の初期化に用いられる.https://blog.csdn.net/bestcxx/article/details/99402140ApplicationListenerはSpringシーンでのみ使用できる.
    リファレンスリンク
    [1]、https://blog.csdn.net/yu_kang/article/details/88389700#EventListener_318 [2]、https://blog.csdn.net/yu_kang/article/details/88727188 [3]、https://blog.csdn.net/tonysong111073/article/details/88385078