網站首頁 編程語言 正文
我們用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
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-05-31 Python中的列表及其操作方法_python
- 2022-12-26 kubernetes數據持久化StorageClass動態供給實現詳解_云和虛擬化
- 2022-04-17 Failed to bind properties under spring.servlet.mul
- 2021-12-08 服務器并發量估算公式和計算方法_服務器其它
- 2022-03-29 python進階之魔術方法詳解_python
- 2023-07-08 前端使用FileReader讀中文會亂碼
- 2023-05-08 C語言中棧的結構和函數接口的使用示例_C 語言
- 2022-04-02 Redis快速實現分布式session的方法詳解_Redis
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支