摘要:背景是事件機制的一部分,與抽象類類配合來完成的事件機制。如果容器中存在的,當調用方法時,對應的會被觸發。單元測試類執行單元測試,會發現事件發布之后,監聽器方法被調用,日志被打印出來。
背景
ApplicationListener是Spring事件機制的一部分,與抽象類ApplicationEvent類配合來完成ApplicationContext的事件機制。
如果容器中存在ApplicationListener的Bean,當ApplicationContext調用publishEvent方法時,對應的Bean會被觸發。這一過程是典型的觀察者模式的實現。
ApplicationListener源碼@FunctionalInterface public interface ApplicationListenerContextRefreshedEvent事件的監聽extends EventListener { /** * Handle an application event. * @param event the event to respond to */ void onApplicationEvent(E event); }
以Spring的內置事件ContextRefreshedEvent為例,當ApplicationContext被初始化或刷新時,會觸發ContextRefreshedEvent事件,下面我們就實現一個ApplicationListener來監聽此事件的發生。
@Component // 需對該類進行Bean的實例化 public class LearnListener implements ApplicationListener{ @Override public void onApplicationEvent(ContextRefreshedEvent event) { // 打印容器中出事Bean的數量 System.out.println("監聽器獲得容器中初始化Bean數量:" + event.getApplicationContext().getBeanDefinitionCount()); } }
如上,便完成了一個事件監聽類的實現和實例化。
自定義事件及監聽首先自定義事件:NotifyEvent。
public class NotifyEvent extends ApplicationEvent { private String email; private String content; public NotifyEvent(Object source) { super(source); } public NotifyEvent(Object source, String email, String content) { super(source); this.email = email; this.content = content; } // 省略getter/setter方法 }
定義監聽器NotifyListener:
@Component public class NotifyListener implements ApplicationListener{ @Override public void onApplicationEvent(NotifyEvent event) { System.out.println("郵件地址:" + event.getEmail()); System.out.println("郵件內容:" + event.getContent()); } }
監聽器通過@Component注解進行實例化,并在onApplicationEvent中打印相關信息。
單元測試類:
@RunWith(SpringRunner.class) @SpringBootTest public class ListenerTest { @Autowired private WebApplicationContext webApplicationContext; @Test public void testListener() { NotifyEvent event = new NotifyEvent("object", "abc@qq.com", "This is the content"); webApplicationContext.publishEvent(event); } }
執行單元測試,會發現事件發布之后,監聽器方法被調用,日志被打印出來。
原文鏈接:https://www.choupangxia.com/2...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75418.html
摘要:準備好了我們可以開始向中發布,當發布后,所有在中的都會收到對應的。將類注入到的中。測試和通過方法將發布到應用上下文中,同時這個動作會觸發收到事件。深入剖析發布與監聽的過程在使用方法發布的時候,最終會調用到中的類的如下的一段代碼。 本篇主要來聊一聊spring中ApplicationListener接口和ApplicationEvent類。 從命名上可以很容易的看出來一個是listene...
摘要:在框架中,有多種事件這些時間會在不同的運行時刻發布,來通知監聽者。本文僅僅介紹的事件的監聽。也可以在文件中配置。 spring application listener 在 spring 框架中,有多種事件, 這些時間會在不同的運行時刻發布,來通知監聽者。本文僅僅介紹 SpringApplicationEvent 的事件的監聽。 事件類型 EventType 發布時間 App...
摘要:創建及準備創建。目前已知關心這個事件的有要注意的是在這個階段,里只有,是的加載工作的起點。原因是注入這些回調接口本身沒有什么意義。在其構造函數內部間接的給注冊了幾個與相關注解的處理器。 相關代碼在: https://github.com/chanjarster/spring-boot-all-callbacks 注:本文基于spring-boot 1.4.1.RELEASE, spri...
摘要:會一直完善下去,歡迎建議和指導,同時也歡迎中用到了那些設計模式中用到了那些設計模式這兩個問題,在面試中比較常見。工廠設計模式使用工廠模式可以通過或創建對象。 我自己總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 41k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://github.com/Snailclimb... JDK 中用到了那...
摘要:事件事件監聽器,對監聽到的事件進行處理。擁有一個成員變量,提供了容器監聽器的注冊表。注冊事件監聽器根據反射機制,使用的方法,從中找出所有實現的,將它們注冊為容器的事件監聽器,實際的操作就是將其添加到事件廣播器所提供的監聽器注冊表中。 1. Spring的資源抽象接口 假如有一個文件位于Web應用的類路徑下,用戶可以通過以下方式對這個文件資源進行訪問: 通過FileSystemReso...
閱讀 2686·2021-09-22 15:58
閱讀 2229·2019-08-29 16:06
閱讀 896·2019-08-29 14:14
閱讀 2809·2019-08-29 13:48
閱讀 2450·2019-08-28 18:01
閱讀 1494·2019-08-28 17:52
閱讀 3317·2019-08-26 14:05
閱讀 1609·2019-08-26 13:50