日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

找找 Spring Event 源码中各种设计模式的使用

發布時間:2025/3/20 javascript 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 找找 Spring Event 源码中各种设计模式的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

本文將按照Spring Event 是什么鬼的思路尋找 Spring 源碼中與 Spring Event 有關的設計模式實現


初始化-工廠模式

AbstractApplicationContext.java /***?Initialize?the?ApplicationEventMulticaster.*?Uses?SimpleApplicationEventMulticaster?if?none?defined?in?the?context.*?@see?org.springframework.context.event.SimpleApplicationEventMulticaster*/ 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);if?(logger.isDebugEnabled())?{logger.debug("Using?ApplicationEventMulticaster?["?+?this.applicationEventMulticaster?+?"]");}}else?{this.applicationEventMulticaster?=?new?SimpleApplicationEventMulticaster(beanFactory);beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME,?this.applicationEventMulticaster);if?(logger.isDebugEnabled())?{logger.debug("Unable?to?locate?ApplicationEventMulticaster?with?name?'"?+APPLICATION_EVENT_MULTICASTER_BEAN_NAME?+"':?using?default?["?+?this.applicationEventMulticaster?+?"]");}} }

Mulicater的創建過程就是通過bean 工廠創建,此處使用了工廠模式,BeanFactory 接口定義了 getBean 方法,AbstractBeanFactory 實現了getBean方法,而針對 Bean 的管理(? ?Bean的定義、Bean的創建以及對Bean的解析)AbstractXXXBeanFactory等抽象類來管理,不同的抽象類有不同的管理策略。

事件發布-觀察者模式

//AbstractApplicationEventMulticaster.javapublic?void?multicastEvent(final?ApplicationEvent?event)?{for?(final?ApplicationListener?listener?:?getApplicationListeners(event))?{Executor?executor?=?getTaskExecutor();if?(executor?!=?null)?{executor.execute(new?Runnable()?{public?void?run()?{listener.onApplicationEvent(event);}});}else?{listener.onApplicationEvent(event);}}}

根據 event,找到監聽的 listener,在事件觸發時,調用 listener 的 onApplicationEvent(event) 方法,此處觀察者模式的運用得益于 ApplicationEvent ApplicationListener 兩個接口的定義,Spring 通過 Listener 的監聽方法參數與實際觸發的事件對象匹配來區別是否應該調用Listener的 onApplicationEvent 方法。


轉載于:https://my.oschina.net/mays/blog/656187

總結

以上是生活随笔為你收集整理的找找 Spring Event 源码中各种设计模式的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。