ApplicationListener春のイベントは、機構の一部、ApplicationContextのを完了するためにイベントメカニズムを持つ抽象クラスApplicationEventクラスです。
ビーンコンテナのApplicationListenerの存在はpublishEventメソッドのApplicationContextを呼び出すときにした場合、対応するBeanがトリガされます。このプロセスは、典型的なオブザーバーモードを達成することです。
ApplicationListenerソース
@FunctionalInterface パブリック インターフェースを ApplicationListenerは<Eが延び ApplicationEvent>の延びのEventListenerを{ / ** *アプリケーションのイベントを処理します。 * @paramのイベントに応答するイベント * / 無効onApplicationEvent(Eイベント); }
ContextRefreshedEventモニター・イベント
組み込みのイベント春ContextRefreshedEvent例に、ApplicationContextのが初期化されたりContextRefreshedEventイベントをトリガしリフレッシュすると、
このイベント発生を監視するApplicationListenerを達成:
@Component // このクラスに必要な豆インスタンス化 パブリック クラス LearnListenerを実装 ApplicationListener <ContextRefreshedEvent> { @オーバーライド 公共 のボイドonApplicationEvent(ContextRefreshedEventイベント){ // プリント血管事故ビーン番号 のSystem.out.println( "リスナーは、コンテナが数ビーンを初期化し得る:" + event.getApplicationContext()getBeanDefinitionCount()); } }
上記は、我々はイベントリスナクラスおよびインスタンス化の実現を完了します。
カスタムイベントとリスナー
すべてのカスタムイベントの最初:NotifyEventから。
パブリック クラス NotifyEventからは延びApplicationEventを{ プライベート文字列のメール。 プライベート文字列の内容。 公共NotifyEventから(オブジェクトソース){ スーパー(ソース)。 } 公共NotifyEventから(オブジェクトソース、文字列のメール、文字列の内容){ スーパー(ソース)。 この .email = メール。 この .content = コンテンツ; } // ゲッター省略/セッターメソッド }
定義されたリスナーNotifyListener:
@Component パブリック クラス NotifyListener 実装 ApplicationListener <NotifyEventから> { @オーバーライド 公共 のボイドonApplicationEvent(NotifyEventからイベント){ System.out.println( "メールアドレス:" + event.getEmail()); System.out.println( "メール内容:" + event.getContent()); } }
リスナー@Component注釈によってインスタンス化、および印刷関連情報onApplicationEvent。
ユニットテストクラス:
@RunWith(SpringRunner。クラス) @SpringBootTest パブリック クラスListenerTest { @Autowired プライベートWebApplicationContext webApplicationContext。 @テスト 公共 のボイドtestListener(){ NotifyEventからイベント = 新しい NotifyEventから(「オブジェクト」、「[email protected]」、「これは、コンテンツが」)。 webApplicationContext.publishEvent(イベント)。 } }