ApplicationListener春のイベントは、機構の一部、ApplicationContextのを完了するためにイベントメカニズムを持つ抽象クラスApplicationEventクラスです。
ビーンコンテナのApplicationListenerの存在はpublishEventメソッドのApplicationContextを呼び出すときにした場合、対応するBeanがトリガされます。このプロセスは、典型的なオブザーバーモードを達成することです。
ApplicationListenerソース
@FunctionalInterface
パブリック インターフェース ApplicationListener <Eは延び ApplicationEvent>が延びのEventListenerを{
/ **
*アプリケーションイベントを処理します。
* @paramのイベントに応答するイベント
* /
無効onApplicationEvent(Eイベント);
}
ContextRefreshedEventモニタイベント
のApplicationContextがされたときに、組み込みのイベントContextRefreshedEvent春には、例えば、初期化したりリフレッシュ ContextRefreshedEventイベントをトリガしたときに、ここでは、このイベントの発生を監視するためにApplicationListenerを達成します。
@Component // このクラスのために必要ではビーンインスタンス化
パブリック クラス LearnListenerを実装が ApplicationListener <ContextRefreshedEvent> {
@Override
公共 のボイドonApplicationEvent(ContextRefreshedEventイベント){
// プリント血管事故ビーン番号
のSystem.out.println(「リスナー「+:豆を取得し、初期化コンテナーの数event.getApplicationContext()getBeanDefinitionCount());.
}
}
以上、私たちはイベントリスナクラスおよびインスタンス化の実現を完了します。
1、カスタムイベントとリスナー
すべてのカスタムイベントの最初:NotifyEventから。
パブリッククラスNotifyEventからは拡張ApplicationEvent { プライベート文字列の電子メールを、プライベート文字列の内容。公共NotifyEventから(オブジェクトソース){ スーパー(ソース)。} 公共NotifyEventから(オブジェクトソース、文字列のメール、文字列の内容){ スーパー(ソース)。this.email = メール。this.content = コンテンツ; } // 省略ゲッター/セッター方法}
2.リスナーNotifyListenerを定義します。
@Component
パブリック クラス NotifyListenerは実装 ApplicationListener <NotifyEventから> {
@Override
公共 ボイドonApplicationEvent(NotifyEventからイベント){
するSystem.out.println( "邮件地址:" + event.getEmail())。
System.out.println( "邮件内容:" + event.getContent());
}
}
リスナー@Component注釈、および印刷関連情報onApplicationEventによってインスタンス。
図3に示すように、ユニットテストクラス:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ListenerTest {
@Autowired
private WebApplicationContext webApplicationContext;
@Test
public void testListener() {
NotifyEvent event = new NotifyEvent("object", "[email protected]", "This is the content");
webApplicationContext.publishEvent(event);
}
}
执行单元测试,会发现事件发布之后,监听器方法被调用,日志被打印出来。