日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

嚴重!Spring AOP Bug導致切面重復執行

來源: 責編: 時間:2024-06-11 17:52:52 276觀看
導讀環境:Spring6.1.71. 問題復現為了提高代碼的復用性和維護性,我們設計了一個通用的抽象的切面父類。這個父類封裝了通用的切面邏輯,如日志記錄、性能監控、異常處理等。通過繼承這個抽象父類,具體的業務切面可以輕松地擴展

環境:Spring6.1.7PIn28資訊網——每日最新資訊28at.com

1. 問題復現

為了提高代碼的復用性和維護性,我們設計了一個通用的抽象的切面父類。這個父類封裝了通用的切面邏輯,如日志記錄、性能監控、異常處理等。通過繼承這個抽象父類,具體的業務切面可以輕松地擴展或定制這些通用功能,而無需從零開始編寫切面邏輯。如下示例:PIn28資訊網——每日最新資訊28at.com

public abstract class CommonAspect {  @Pointcut("execution(public * com.pack..*.*(..))")  private void commonPointcut() {}  @Before("bean(*Service)")  protected void beforeLog(JoinPoint jp) {    System.out.println("通用日志記錄...") ;  }  @Around("@annotation(monitor)")  protected Object monitorRun(ProceedingJoinPoint pjp, Monitor monitor) throws Throwable {    Object ret = null ;    // TODO    ret = pjp.proceed() ;    // TODO    return ret ;  }  // other}

具體切面子類

@Component@Aspectpublic class LogAspect extends CommonAspect {  @Override  public void beforeLog(JoinPoint jp) {    System.out.println("重寫日志記錄功能") ;  }}

當項目運行時出現詭異的問題,既然打印了2次日志信息。PIn28資訊網——每日最新資訊28at.com

// 測試代碼AnnotationConfigApplicationContext context = ... ;PersonService ps = context.getBean(PersonService.class) ;ps.queryById(1L) ;

執行結果

重寫日志記錄功能重寫日志記錄功能查詢Person對象

雖然執行了我們重寫的方法,但是日志確輸出了2遍。PIn28資訊網——每日最新資訊28at.com

通過debug分析

容器在啟動初始化解析@Aspect切面時,在獲取切面類中的所有方法時,會得到兩個方法(父類及子類重寫的)PIn28資訊網——每日最新資訊28at.com

圖片圖片PIn28資訊網——每日最新資訊28at.com

在這里的getAdvisorMethods方法返回了3個方法,其中2個是父類中的一個是子類重寫的方法PIn28資訊網——每日最新資訊28at.com

圖片圖片PIn28資訊網——每日最新資訊28at.com

那么接下來根據這2個方法就會生成對應的Advisor對象。PIn28資訊網——每日最新資訊28at.com

圖片圖片PIn28資訊網——每日最新資訊28at.com

這也就是為什么重復的原因了。Spring并沒有判斷我當前的這個通知是否是重寫父類的方法。PIn28資訊網——每日最新資訊28at.com

注:在Spring中@Aspect定義的切面最終都會轉換為Advisor對象,當代理類在執行時會遍歷所有符合添加的Advisor然后從中取出對應的Advice(MethodInterceptor)對象。PIn28資訊網——每日最新資訊28at.com

既然知道了問題出現的原因,接下來就進行解決該問題。PIn28資訊網——每日最新資訊28at.com

2. 解決問題

2.1 解決辦法1

我們可以在子類重寫的方法上再加上通知類型,將切入點設置的不匹配任何方法即可PIn28資訊網——每日最新資訊28at.com

@Before("execution(public * xxxooo())")@Overridepublic void beforeLog(JoinPoint jp) {  System.out.println("重寫日志記錄功能") ;}

在這里重寫的方法上,將切入點重新寫,該切入點不會匹配任何的方法,這樣修改以后再次執行PIn28資訊網——每日最新資訊28at.com

重寫日志記錄功能查詢Person對象

正常執行,沒有重復輸出日志。PIn28資訊網——每日最新資訊28at.com

2.2 解決辦法2

該方法需要將Spring版本升級到6.1.8,在該版本中解決了該問題。來看看在該版本中是如何解決的。PIn28資訊網——每日最新資訊28at.com

6.1.8版本

核心方法還是在上面debug是看到的getAdvisors方法中PIn28資訊網——每日最新資訊28at.com

public class ReflectiveAspectJAdvisorFactory {  public List<Advisor> getAdvisors(...) {    List<Advisor> advisors = new ArrayList<>();    for (Method method : getAdvisorMethods(aspectClass)) {      // 在這里加入了判斷(當前方法是否與當前切面中的方法相同)      // 當遍歷到這里的Method是父類中的方法時,這里的getMostSpecificMethod      // 方法就會判斷根據方法的名稱再從當前切面類中獲取方法(那當然就不同了)      if (method.equals(ClassUtils.getMostSpecificMethod(method, aspectClass))) {        Advisor advisor = getAdvisor(method, lazySingletonAspectInstanceFactory, 0, aspectName);        if (advisor != null) {          advisors.add(advisor);        }      }    }  }}

圖片圖片PIn28資訊網——每日最新資訊28at.com

在6.1.8版本中通過這種方式就排除了父類的方法。PIn28資訊網——每日最新資訊28at.com

其它版本

圖片圖片PIn28資訊網——每日最新資訊28at.com

低于6.1.8版本,都沒有相應的判斷。PIn28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-93092-0.html嚴重!Spring AOP Bug導致切面重復執行

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: PHP 服務實現性能剖析、跟蹤和可觀察性14444444444444】=102102102102102102102102102102102102102102102102實踐

下一篇: 多線程編程在 C# 中的基礎概念與實現

標簽:
  • 熱門焦點
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網課,網課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業又有了新的發展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • OPPO K11評測:旗艦級IMX890加持 2000元檔最強影像手機

    【Techweb評測】中端機型用戶群體巨大,占了中國目前手機市場的大頭,一直以來都是各手機品牌的“必爭之地”,其中OPPO K系列機型一直以來都以高品質、
  • 外交部:美方應停止在網絡安全問題上不負責任地指責他國

      中國外交部今天(16日)舉行例行記者會。會上,有記者問,美國情報官員稱,他們正在阻攔來自中國以及其他國家的黑客獲取相關科研成果。 中方對此有何評論?對此
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
99热这里只有精品8| 伊人成人网在线看| 欧美日韩精品在线视频| 国产精品高清在线观看| 国产欧亚日韩视频| 欧美一区二区| 久久婷婷成人综合色| 免费永久网站黄欧美| 久久av老司机精品网站导航| 久久久免费av| 欧美日韩国产在线播放网站| 国产精品夜夜夜| 亚洲第一精品夜夜躁人人躁| 日韩午夜三级在线| 欧美亚洲一区二区在线| 欧美大成色www永久网站婷| 国产精品扒开腿做爽爽爽软件 | 午夜精品久久久久久久白皮肤| 久久久国产成人精品| 欧美日韩精品免费观看视频完整| 国产欧美视频一区二区三区| 亚洲人成网在线播放| 午夜精品免费在线| 欧美成人精品| 国产欧美日本| 一本大道久久a久久精品综合 | 国产精品极品美女粉嫩高清在线 | 久久激情五月激情| 欧美视频在线观看免费| 影音先锋国产精品| 亚洲欧美激情一区二区| 欧美高清在线| 国产一区二区高清不卡| 一区二区激情视频| 玖玖玖国产精品| 国产精品日韩欧美一区| 亚洲毛片在线| 久久免费少妇高潮久久精品99| 国产精品a久久久久| 亚洲精品九九| 久久免费视频这里只有精品| 国产精品性做久久久久久| 亚洲精品影院| 免费成人你懂的| 国产亚洲精品7777| 亚洲夜间福利| 欧美日韩国产va另类| 尤物精品在线| 欧美有码视频| 国产精品久久久久秋霞鲁丝| 亚洲每日在线| 欧美大胆a视频| 在线看视频不卡| 久久久久欧美精品| 国产在线观看91精品一区| 亚洲免费在线看| 欧美日韩在线观看一区二区三区 | 亚洲国产日韩精品| 久久婷婷国产麻豆91天堂| 国产日韩欧美| 午夜精品三级视频福利| 欧美网站大全在线观看| 99在线热播精品免费99热| 欧美丰满少妇xxxbbb| 永久久久久久| 久久久久久噜噜噜久久久精品| 国产精品自拍在线| 亚洲欧美www| 欧美午夜美女看片| 在线一区二区三区四区| 欧美日韩视频在线第一区| 亚洲美女精品久久| 欧美日本免费| 亚洲乱码久久| 欧美日韩国产123| 99精品热视频| 欧美婷婷六月丁香综合色| 99热免费精品在线观看| 欧美日韩国产小视频在线观看| 亚洲人屁股眼子交8| 欧美韩日一区二区| 亚洲伦伦在线| 欧美色视频一区| 亚洲一区二区三区在线看| 国产精品乱码久久久久久| 亚洲主播在线观看| 国产欧美日韩视频一区二区| 欧美亚洲在线视频| 国产自产v一区二区三区c| 久久亚洲欧美国产精品乐播| 在线观看欧美亚洲| 欧美国产综合视频| 一区二区三区高清在线| 国产精品久久久久久久久久三级 | 在线观看视频欧美| 久久国产手机看片| 亚洲制服欧美中文字幕中文字幕| 亚洲综合二区| 一本久道综合久久精品| 国产午夜亚洲精品羞羞网站| 欧美日韩综合精品| 欧美福利在线| 午夜精品视频一区| 欧美一区二区三区视频在线| 久久久久中文| 欧美高清日韩| 国产精品入口日韩视频大尺度| 国产精品久久久久毛片软件| 国产婷婷色综合av蜜臀av| 黄色日韩在线| 亚洲香蕉视频| 尤物yw午夜国产精品视频明星| 精品av久久707| 欧美亚洲视频一区二区| 亚洲愉拍自拍另类高清精品| 欧美激情一区二区三级高清视频 | 国产伊人精品| 国产精品成人观看视频免费| 在线日本欧美| 在线观看成人av| 亚洲第一中文字幕| 亚洲免费大片| 亚洲第一福利在线观看| 91久久在线视频| 亚洲午夜一区二区三区| 性8sex亚洲区入口| 久久精品一区| 欧美啪啪一区| 亚洲七七久久综合桃花剧情介绍| 国产精品高潮呻吟久久av黑人| 永久91嫩草亚洲精品人人| 一本色道久久| 欧美在线免费视频| 国产在线拍偷自揄拍精品| 欧美r片在线| 亚洲欧美成人网| 在线观看亚洲a| 国产精品v欧美精品v日韩| 久久九九99| 亚洲美女视频在线观看| 亚洲女同同性videoxma| 国产精品扒开腿爽爽爽视频| 亚洲精品视频免费| 一区二区三区四区国产| 欧美另类人妖| 亚洲伊人一本大道中文字幕| 模特精品在线| 亚洲精品日韩在线| 国产精品视频网| 美女免费视频一区| 中文在线资源观看网站视频免费不卡 | 国产精品中文字幕欧美| 亚洲综合精品自拍| 欧美母乳在线| 先锋a资源在线看亚洲| 亚洲日本va在线观看| 国产亚洲一级| 欧美午夜片在线观看| 美女日韩欧美| 久久黄色级2电影| 亚洲一区二区四区| 亚洲精品在线电影| 精品91视频| 国产欧美日韩亚洲| 欧美视频手机在线| 欧美第一黄色网| 久久久国产午夜精品| 亚洲欧美国产另类| 夜夜嗨av色一区二区不卡| 亚洲福利小视频| 好吊妞这里只有精品| 国产欧美一区二区精品性| 欧美三区在线| 午夜亚洲精品| 一区二区三区高清不卡| 亚洲欧洲精品一区二区| 激情文学综合丁香| 国产欧美不卡| 国产精品免费一区豆花| 欧美日韩在线播| 欧美激情精品久久久| 蜜桃精品一区二区三区| 久久久精品日韩欧美| 欧美亚洲色图校园春色| 亚洲欧美制服中文字幕| 亚洲午夜精品国产| 一本一本大道香蕉久在线精品| 亚洲精品国精品久久99热| 1024欧美极品| 亚洲高清久久久| 亚洲成人资源网| 亚洲第一久久影院| 在线欧美日韩国产| 永久免费视频成人| 亚洲高清视频在线| 亚洲国产经典视频| 亚洲破处大片| 亚洲人午夜精品| 亚洲黄色免费| 亚洲人www| 日韩午夜激情| 夜夜嗨一区二区| 国产精品99久久不卡二区| 亚洲视频一区在线|