日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

AOP獲取方法返回值

作者:Jothan Zhong 更新時間: 2024-01-08 編程語言

我們用Spring的AOP切面做日志收集或者記錄的時候,在springboot中用@Aspect注解。比如:


@Aspect
public class AdviceTest {
    @Before("execution(* com.abc.service.*.many*(..))")
    public void permissionCheck(JoinPoint point) {
        System.out.println("@Before:模擬權限檢查...");
        System.out.println("@Before:目標方法為:" + 
                point.getSignature().getDeclaringTypeName() + 
                "." + point.getSignature().getName());
        System.out.println("@Before:參數為:" + Arrays.toString(point.getArgs()));
        System.out.println("@Before:被織入的目標對象為:" + point.getTarget());
    }
    
    @After("execution(* com.abc.service.*.many*(..))")
    public void releaseResource(JoinPoint point) {
        System.out.println("@After:模擬釋放資源...");
        System.out.println("@After:目標方法為:" + 
                point.getSignature().getDeclaringTypeName() + 
                "." + point.getSignature().getName());
        System.out.println("@After:參數為:" + Arrays.toString(point.getArgs()));
        System.out.println("@After:被織入的目標對象為:" + point.getTarget());
    }
12345678910111213141516171819202122

@Before表示方法請求前執行,@After表示方法請求后執行,一般做記錄的時候會使用@After比較多。但是有時候我們需要獲取方法的返回值做判斷該如何處理呢?首先,我們看@After的注解源碼。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface After {
    String value();

    String argNames() default "";
}
1234567

可以看到@After注解并不能獲取到方法的返回值。這個時候我們需要的是@AfterReturning。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface AfterReturning {
    String value() default "";

    String pointcut() default "";

    String returning() default "";

    String argNames() default "";
}
1234567891011

returning表示的就是返回值。應用如下:

    @AfterReturning(value = "execution(* com.test.business.controller.TestController.audit*(..))",
            returning = "methodResult")
    public void afterReturning(JoinPoint joinPoint, Object methodResult) {
        MethodSignature ms = (MethodSignature) joinPoint.getSignature();
        Method method = ms.getMethod();

        System.out.println("請求方法為:" + method.getName());
        System.out.println("請求返回內容為:" + methodResult.toString());
    }
123456789

這樣就可以獲取返回值,然后根據返回值做羅輯處理了。

原文鏈接:https://blog.csdn.net/qq_43985303/article/details/135362327

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新