中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

精品課程網(wǎng)站設計建站優(yōu)化

精品課程網(wǎng)站設計,建站優(yōu)化,怎么看一個網(wǎng)站用什么平臺做的,網(wǎng)頁設計圖片不顯示目錄 事件基類定義 事件監(jiān)聽器接口 事件發(fā)布者接口及實現(xiàn) 事件廣播器實現(xiàn) 小小總結(jié) Spring源碼分析之事件機制——觀察者模式(一)-CSDN博客 Spring源碼分析之事件機制——觀察者模式(二)-CSDN博客 Spring源碼分析之事件機制…

目錄

事件基類定義

事件監(jiān)聽器接口

事件發(fā)布者接口及實現(xiàn)

事件廣播器實現(xiàn)

小小總結(jié)


Spring源碼分析之事件機制——觀察者模式(一)-CSDN博客

Spring源碼分析之事件機制——觀察者模式(二)-CSDN博客

Spring源碼分析之事件機制——觀察者模式(三)-CSDN博客

這兩篇文章是這個篇章的后篇,感興趣的讀者可以閱讀一下,從spring源碼分析觀察者模式

事件基類定義

public abstract class ApplicationEvent extends EventObject {// 事件發(fā)生的時間戳private final long timestamp;public ApplicationEvent(Object source) {// source表示事件源,即發(fā)布事件的對象super(source);this.timestamp = System.currentTimeMillis();}// 獲取事件發(fā)生時間public final long getTimestamp() {return this.timestamp;}
}

ApplicationEvent作為所有Spring事件的基類,繼承自Java的EventObject,通過記錄時間戳和事件源,為事件提供了基本的元數(shù)據(jù)信息,使得事件能夠攜帶更多的上下文信息。

事件監(jiān)聽器接口

@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {/*** 處理應用事件的方法* @param event 要響應的事件*/void onApplicationEvent(E event);
}

ApplicationListener接口定義了事件監(jiān)聽器的標準,通過泛型約束限定了具體監(jiān)聽的事件類型,使得監(jiān)聽器能夠只關注特定類型的事件,我覺得spring的這種設計既保證了類型安全,又提供了良好的擴展性。

事件發(fā)布者接口及實現(xiàn)

@FunctionalInterface
public interface ApplicationEventPublisher {/*** 發(fā)布事件的方法* @param event 要發(fā)布的事件*/default void publishEvent(ApplicationEvent event) {publishEvent((Object) event);}/*** 發(fā)布任意對象作為事件* @param event 要發(fā)布的事件對象*/void publishEvent(Object event);
}

public abstract class AbstractApplicationContext implements ApplicationEventPublisher {// 事件廣播器private ApplicationEventMulticaster applicationEventMulticaster;// 早期事件緩存,用于存儲容器未完全初始化前的事件private Set<ApplicationEvent> earlyApplicationEvents;@Overridepublic void publishEvent(Object event) {// 確保事件對象是ApplicationEvent類型ApplicationEvent applicationEvent;if (event instanceof ApplicationEvent) {applicationEvent = (ApplicationEvent) event;} else {// 將普通對象包裝為PayloadApplicationEventapplicationEvent = new PayloadApplicationEvent<>(this, event);}// 如果容器還在初始化,則將事件添加到早期事件集合if (this.earlyApplicationEvents != null) {this.earlyApplicationEvents.add(applicationEvent);} else {// 通過事件廣播器發(fā)布事件getApplicationEventMulticaster().multicastEvent(applicationEvent);}// 如果存在父容器,則同時發(fā)布到父容器if (this.parent != null) {this.parent.publishEvent(event);}}// 初始化事件廣播器protected void initApplicationEventMulticaster() {ConfigurableListableBeanFactory beanFactory = getBeanFactory();// 如果容器中已定義了廣播器,則使用已定義的if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {this.applicationEventMulticaster = beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);} else {// 否則創(chuàng)建一個簡單的事件廣播器this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);}}
}

AbstractApplicationContext實現(xiàn)了事件發(fā)布的核心邏輯,通過事件廣播器將事件分發(fā)給所有相關的監(jiān)聽器,同時處理了事件的向上傳播和早期事件的緩存。

事件廣播器實現(xiàn)

public class SimpleApplicationEventMulticaster extends AbstractApplicationEventMulticaster {// 任務執(zhí)行器,用于異步事件處理@Nullableprivate Executor taskExecutor;// 錯誤處理器@Nullableprivate ErrorHandler errorHandler;@Overridepublic void multicastEvent(ApplicationEvent event) {// 解析事件類型并廣播multicastEvent(event, resolveDefaultEventType(event));}@Overridepublic void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) {// 解析事件類型ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));// 獲取所有匹配的監(jiān)聽器并執(zhí)行for (final ApplicationListener<?> listener : getApplicationListeners(event, type)) {Executor executor = getTaskExecutor();if (executor != null) {// 異步執(zhí)行executor.execute(() -> invokeListener(listener, event));} else {// 同步執(zhí)行invokeListener(listener, event);}}}protected void invokeListener(ApplicationListener<?> listener, ApplicationEvent event) {ErrorHandler errorHandler = getErrorHandler();if (errorHandler != null) {try {doInvokeListener(listener, event);} catch (Throwable err) {errorHandler.handleError(err);}} else {doInvokeListener(listener, event);}}
}

SimpleApplicationEventMulticaster提供了事件廣播的具體實現(xiàn),支持同步和異步兩種事件處理方式,并提供了錯誤處理機制,通過這種設計,使得事件的處理更加靈活和可靠,同時也為性能優(yōu)化提供了可能。

小小總結(jié)

Spring的事件機制通過這些精心設計的組件,構(gòu)建了一個完整的觀察者模式實現(xiàn),它不僅支持Spring框架內(nèi)部的事件處理,也為應用程序提供了一個強大的事件驅(qū)動架構(gòu)基礎,通過這種方式,可以實現(xiàn)組件間的松耦合通信,提高系統(tǒng)的可維護性和擴展性。整個實現(xiàn)考慮了性能、可靠性和易用性等多個方面,是一個非常典型的觀察者模式應用案例。

http://www.risenshineclean.com/news/62588.html

相關文章:

  • 做網(wǎng)站 對方傳銷企拓客app騙局
  • 網(wǎng)站里的搜索怎么做的已矣seo排名點擊軟件
  • 做多國語言網(wǎng)站品牌策略的7種類型
  • 網(wǎng)站開發(fā)分為幾個方向互聯(lián)網(wǎng)營銷師
  • 臺州網(wǎng)站建設哪家公司好怎么自己制作網(wǎng)站
  • 做網(wǎng)站的費屬于什么費用建網(wǎng)站需要多少錢和什么條件
  • 佛山網(wǎng)站開發(fā)網(wǎng)絡營銷方式有哪幾種
  • 站群軟件哪個好站長友情鏈接平臺
  • 做一個在線支付網(wǎng)站寧德市蕉城區(qū)疫情
  • vue做企業(yè)網(wǎng)站上海百度推廣平臺
  • 懷化冰山涯IT網(wǎng)站建設公司鄭州網(wǎng)絡營銷哪個好
  • 網(wǎng)站建設后臺 手工上傳深圳百度快速排名提升
  • 私人建設網(wǎng)站石家莊關鍵詞優(yōu)化平臺
  • 文檔怎么做網(wǎng)站鏈接搜外
  • 賣鋼材做哪個宣傳網(wǎng)站暴瘋團隊seo課程
  • 興義做網(wǎng)站抖音關鍵詞挖掘工具
  • 個人怎樣建立網(wǎng)站市場調(diào)研報告1500字
  • 怎么敲代碼做網(wǎng)站云南省最新疫情情況
  • 網(wǎng)頁制作團隊哈爾濱百度關鍵詞優(yōu)化
  • 焦作網(wǎng)站建設兼職網(wǎng)絡推廣公司哪家做得好
  • 徐州哪有做網(wǎng)站的熱門seo推廣排名穩(wěn)定
  • 網(wǎng)站修改標題有影響嗎站長工具seo綜合查詢columbu cat
  • 網(wǎng)站制作長沙長沙企業(yè)網(wǎng)站設計
  • 流量網(wǎng)站應該怎么做seo分析seo診斷
  • wdcp網(wǎng)站遷移google play下載安卓
  • 廣州做網(wǎng)站哪家專業(yè)最近三天的新聞大事國內(nèi)
  • 建設一個看電影的網(wǎng)站營銷軟文范例大全100
  • 個人備案網(wǎng)站做網(wǎng)購網(wǎng)站購買友情鏈接網(wǎng)站
  • html5可以做交互網(wǎng)站嗎成都抖音seo
  • 個別網(wǎng)站網(wǎng)速慢怎么做電商網(wǎng)站設計方案