在SpringBoot中使用AOP——通知中的引數

狂奔的蝸牛Evan發表於2020-11-13

文章目錄


本文基於 在SpringBoot中使用AOP
獲取被被通知方法引數並傳遞給通知方法,主要有兩種方式:

 

  • 使用JoinPoint獲取:Spring AOP提供使用org.aspectj.lang.JoinPoint型別獲取連線點資料,任何通知方法的第一個引數都可以是JoinPoint(環繞通知是ProceedingJoinPoint,JoinPoint子類),當然第一個引數位置也可以是JoinPoint.StaticPart型別,這個只返回連線點的靜態部分。
  • 自動獲取:通過切入點表示式(arg())可以將相應的引數自動傳遞給通知方法;

使用JoinPoint獲取

也就是在通知的方法中,第一個引數使用JoinPoint 。(環繞通知是ProceedingJoinPoint,JoinPoint子類)

@Before(value = "printVisitLog()")
public void before(JoinPoint joinPoint) {
	log.info("目標物件:" + joinPoint.getTarget());
	log.info("目標方法:" + joinPoint.getSignature().getDeclaringTypeName() +"." + joinPoint.getSignature().getName());
	log.info("傳入引數:" + Arrays.toString(joinPoint.getArgs()));
}

自動獲取

@Pointcut(value = "execution(public * com.boco.fyk..controller..*.*(..)) && !within(com.boco.fyk.core.config.controller.*)" 
		+ " && args(userId,..)")
public void printVisitLog(String userId) {}

@Before(value = "printVisitLog(userId)")
public void before(String userId) {
	log.info("引數:" + userId);
}

在後置返回通知中獲取返回值

在後置返回通知中獲取返回值,只需要在@AfterReturning註解中,加入屬性returning,值隨便取。

@AfterReturning(value = "printVisitLog()", returning="v")
public void afterReturning(Object v) {
	log.info(v.toString());
}

在後置異常通知中獲取異常

要在後置異常通知中,獲取異常,只需要在@AfterThrowing註解中,加入屬性throwing ,值隨便取。

@AfterThrowing(value = "printVisitLog()", throwing = "e")
public void afterThrowing(Object e) {
	......
}

 

 

原文地址:https://blog.csdn.net/fyk844645164/article/details/100314371 

相關文章