簡體   English   中英

Spring boot 應用程序中@Around 建議中的異常處理

[英]Exception handling in @Around advice in Spring boot application

我有一個用例如下:

在到達服務層之前,我必須做一些預處理,並對預處理過的數據做一些進一步的操作。 基本上,我想在@Before@AfterReturning的建議之間共享處理過的數據。

我在這里瀏覽了各種帖子,這似乎是使用@Around實現這一目標的最佳方法,否則,我必須創建一個類級屬性來捕獲兩個不同建議之間的數據,而且,我必須處理線程-安全。

因此生成的代碼片段將如下所示:

    @Aspect
    public class MyAspect {
         
        @Pointcut("@within(org.springframework.stereotype.Service)")
        public void applicationServicePointcut() {
            
        }

        @Around(value = "applicationServicePointcut()")
        public Object process(ProceedingJoinPoint joinPoint) throws Throwable {
                //Before section
                ... some preprocessing...

                
                try {
                    Object result = joinPoint.proceed();
                    //After section
                     ...save preprocessed data in db...

                     return result;
                 } catch(Exception e) {
                     throw e;
                 }
        }
    }

但是有了@Around建議,我似乎有兩個問題/疑問:

  1. 只有在服務中沒有異常時才應運行 after 部分中的代碼。 有了上面的代碼結構,我想,它應該可以正常工作。 如果我錯了,請糾正我。

  2. 另一個具有更高優先級的方面被定義為使用@AfterThrowing建議處理異常。 我無法理解,使用此設置,上述代碼中的異常處理能否正常工作?

    如果不是,那么我想我必須退回到在方面中定義兩個通知@Before@AfterReturning的選項,並在 ThreadLocal 變量的幫助下在這兩者之間共享數據。

有人可以在這里幫忙嗎? 謝謝。

  1. 只有在服務中沒有異常時才應運行 after 部分中的代碼。 有了上面的代碼結構,我想,它應該可以正常工作。 如果我錯了,請糾正我。

這將正常工作

  1. 另一個具有更高優先級的方面被定義為使用 @AfterThrowing 建議處理異常。 我無法理解,使用此設置,上述代碼中的異常處理能否正常工作? 如果不是,那么我想我必須退回到在方面中定義兩個通知 @Before 和 @AfterReturning 的選項,並在 ThreadLocal 變量的幫助下在這兩者之間共享數據。

這里的問題是,當您不做任何事情時,為什么要捕獲異常? 您可以刪除 try/catch。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM