最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Spring監(jiān)聽器的多種使用方式

 更新時間:2025年12月23日 15:39:34   作者:尤物程序猿  
文章介紹了Spring事件監(jiān)聽模型中的注解使用方式,重點講解了@EventListener和@TransactionalEventListener的使用場景和參數(shù),文章還提到在實際項目中,由于需要處理事務(wù)和緩存問題,感興趣的朋友跟隨小編一起看看吧

Java的spring事件監(jiān)聽模型還是很好用的。這里主要講監(jiān)聽器的注解的使用方式。

最重要的有倆種注解

作用適用場景
@EventListener標(biāo)記方法為事件監(jiān)聽器通用事件監(jiān)聽,*(非事務(wù))
@TransactionalEventListener事務(wù)相關(guān)的事件監(jiān)聽需要事務(wù)綁定的事件(事務(wù))

對于@EventListener,有三個參數(shù)

value、classes、condition

value和classes主要是指定相關(guān)事件的

condition是最常用的,使用Spring Expression Language (SpEL) 實現(xiàn)動態(tài)過濾。.

SpEL 表達(dá)式可以訪問以下變量:

變量名等價形式說明
#root.eventevent當(dāng)前事件對象
#root.argsargs方法參數(shù)數(shù)組
#a0#p0args[0]第一個參數(shù)
#a1#p1args[1]第二個參數(shù)
#orderEvent參數(shù)名為 orderEvent 的參數(shù)

也可以動態(tài)的注冊一個spel函數(shù)

 public static boolean calculateLength(int type, String article) {
            //通過枚舉解析type
//解析長度
        }

講其注入到context中去

static class SpelFunctionRegister implements BeanFactoryAware, ApplicationContextAware {
        @Override
        public void setBeanFactory(BeanFactory beanFactory) 
               throws BeansException {
            // 注冊自定義函數(shù)
            StandardEvaluationContext context = 
                ((StandardEvaluationContext) 
                 beanFactory.getBean(StandardEvaluationContext.class));
            try {
                // 注冊一個計算評論內(nèi)容的函數(shù)
                context.registerFunction("calculateLength",
                    CustomSpELFunctions.class.getDeclaredMethod(
                        "calculateLength", 
                        Integer.class, String.class));
            } catch (NoSuchMethodException e) {
                throw new RuntimeException("注冊SpEL函數(shù)失敗", e);
            }
        }
    }
@EventListener(condition = 
        "#calculatLenth(#event.commentType, #event.article)")
    public void handleDiscountOrder(OrderEvent event) {
        //符合評論類型、評論內(nèi)容
    }

實際項目更常用的還是@TransactionalEventListener

將事件監(jiān)聽與數(shù)據(jù)庫事務(wù)的生命周期綁定,解決了“何時觸發(fā)事件處理”這個關(guān)鍵問題。

退可當(dāng)普通監(jiān)聽器使用,進(jìn)可處理事務(wù)相關(guān)的監(jiān)聽,

定義了四個參數(shù)

1:phase(重要參數(shù)) :以下四個策略

public enum TransactionPhase {
    // 四個關(guān)鍵階段
    BEFORE_COMMIT,    // 事務(wù)提交前
    AFTER_COMMIT,     // 事務(wù)提交后(默認(rèn))是最常用的
    AFTER_ROLLBACK,   // 事務(wù)回滾后  
    AFTER_COMPLETION  // 事務(wù)完成后(無論成功失?。?
}

2:value() 就是指定監(jiān)聽具體的事件的,含義差不多
3:classes() 就是指定監(jiān)聽具體的事件的,含義差不多

4:condition() 與@EventListenner差不多一個東西

為什么說@EventListener在實際項目好像使用的更多一點,平時寫代碼不怎么使用這玩意呢

1:大部分表的update、delete、add肯定都會用事務(wù)進(jìn)行包裝,而對于這些增刪改操作又會涉及到一系列的問題。比如清理緩存、一致性補(bǔ)償、異步編排等等十分常見,將代碼解耦合。對于實際項目的一個接口而言代碼過長不利于擴(kuò)展、理解以及數(shù)據(jù)的正確性

2:清理多節(jié)點本地緩存也十分常用,對于多節(jié)點的分布式系統(tǒng)而言,不可能都采用的遠(yuǎn)程緩存來做,必然有很多的本地緩存,或者是本地+遠(yuǎn)程遠(yuǎn)程來做的,如果涉及到緩存數(shù)據(jù)相關(guān)業(yè)務(wù)數(shù)據(jù)的變更,如果我只在當(dāng)前節(jié)點進(jìn)行清理緩存,那么其他節(jié)點就有可能有臟數(shù)據(jù)的問題,如果緩存時間還長,那線上環(huán)境的影響是很大的。比如清理所有節(jié)點的更新的業(yè)務(wù)緩存數(shù)據(jù)。對于采用了本地緩存的業(yè)務(wù),在業(yè)務(wù)變更需要進(jìn)行publis事件來清除緩存是最高效的。

到此這篇關(guān)于spring的監(jiān)聽器的幾種使用方式的文章就介紹到這了,更多相關(guān)spring監(jiān)聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制功能

    SpringBoot整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制功能

    本教程詳細(xì)介紹了如何使用SpringBoot整合SpringSecurity實現(xiàn)數(shù)據(jù)庫登錄和權(quán)限控制,本文分步驟結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • IDEA進(jìn)程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug

    IDEA進(jìn)程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug

    這篇文章主要介紹了IDEA進(jìn)程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug,本文通過實例代碼圖文的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • maven項目不編譯xml文件問題

    maven項目不編譯xml文件問題

    這篇文章主要介紹了maven項目不編譯xml文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Java如何根據(jù)key值修改Hashmap中的value值

    Java如何根據(jù)key值修改Hashmap中的value值

    這篇文章主要介紹了Java如何根據(jù)key值修改Hashmap中的value值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java 如何查看jar包加載順序

    java 如何查看jar包加載順序

    這篇文章主要介紹了java 如何查看jar包加載順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java設(shè)計模式之代理模式詳細(xì)解讀

    Java設(shè)計模式之代理模式詳細(xì)解讀

    這篇文章主要介紹了Java設(shè)計模式的代理模式,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Java設(shè)計模式的小伙伴有很大的幫助,感興趣的小伙伴可以參考一下
    2021-08-08
  • java 線程公平鎖與非公平鎖詳解及實例代碼

    java 線程公平鎖與非公平鎖詳解及實例代碼

    這篇文章主要介紹了java 線程公平鎖與非公平鎖詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Spring?請求之傳遞?JSON?數(shù)據(jù)的操作方法

    Spring?請求之傳遞?JSON?數(shù)據(jù)的操作方法

    JSON 就是一種數(shù)據(jù)格式,有自己的格式和語法,使用文本表示一個對象或數(shù)組的信息,因此 JSON 本質(zhì)是字符串,主要負(fù)責(zé)在不同的語言中數(shù)據(jù)傳遞和交換,這篇文章主要介紹了Spring請求之傳遞JSON數(shù)據(jù)的相關(guān)知識,需要的朋友可以參考下
    2025-04-04
  • 解決java.lang.IllegalArgumentException異常問題

    解決java.lang.IllegalArgumentException異常問題

    這篇文章主要介紹了解決java.lang.IllegalArgumentException異常問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列

    java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列

    這篇文章主要為大家介紹了java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列的方法示例應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03

最新評論

翼城县| 永吉县| 涞源县| 彝良县| 长岭县| 长子县| 勃利县| 内黄县| 阜南县| 巴林右旗| 三穗县| 吴川市| 平和县| 遂昌县| 阜阳市| 喀什市| 中牟县| 双江| 五寨县| 周至县| 陆丰市| 上虞市| 辽源市| 岑溪市| 阿克| 平阴县| 卢龙县| 马山县| 吐鲁番市| 象州县| 岚皋县| 桐乡市| 合山市| 大宁县| 汤原县| 株洲县| 象州县| 富顺县| 华坪县| 长顺县| 同仁县|