Spring-AOP:@AfterReturning立即执行
Spring-AOP:@AfterReturning is executed immediately
您好,我正在使用 Spring AOP 进行日志记录,我有以下两个方面 @Before 和 @AfterReturning 不幸的是,两者都在这里打印相同的响应,期望是 @Before 打印方法输入和 @AfterReturning 打印方法输出.
@Before(value ="execution(* com.abc.xyz.service..*(..))")
fun logBeforeAllMethods(joinPoint: JoinPoint) {
log.info("Service Request : " + Arrays.toString(joinPoint.args))
}
@AfterReturning(value="execution(* com.abc.xyz.service..*(..))")
fun logAfterAllMethods(joinPoint: JoinPoint) {
log.info("Service Response : " + Arrays.toString(joinPoint.args))
}
毫不奇怪,如果您告诉这两种建议方法,它们会打印出相同的结果。在这两种情况下,您都说要打印方法 arguments。您没有在任何地方声明应该打印 result。您可以通过 @AfterReturning
注释中的可选 returning
参数来做到这一点。
也许您想查看 Spring manual,这里有一个您想要执行的示例(甚至在 Kotlin 中可用!)。
@Aspect
class AfterReturningExample {
@AfterReturning(
pointcut = "com.xyz.myapp.CommonPointcuts.dataAccessOperation()",
returning = "retVal")
fun doAccessCheck(retVal: Any) {
// ...
}
}
当然,如果您在建议中需要两者,您也可以将连接点和 return 值绑定到方法参数。
您好,我正在使用 Spring AOP 进行日志记录,我有以下两个方面 @Before 和 @AfterReturning 不幸的是,两者都在这里打印相同的响应,期望是 @Before 打印方法输入和 @AfterReturning 打印方法输出.
@Before(value ="execution(* com.abc.xyz.service..*(..))")
fun logBeforeAllMethods(joinPoint: JoinPoint) {
log.info("Service Request : " + Arrays.toString(joinPoint.args))
}
@AfterReturning(value="execution(* com.abc.xyz.service..*(..))")
fun logAfterAllMethods(joinPoint: JoinPoint) {
log.info("Service Response : " + Arrays.toString(joinPoint.args))
}
毫不奇怪,如果您告诉这两种建议方法,它们会打印出相同的结果。在这两种情况下,您都说要打印方法 arguments。您没有在任何地方声明应该打印 result。您可以通过 @AfterReturning
注释中的可选 returning
参数来做到这一点。
也许您想查看 Spring manual,这里有一个您想要执行的示例(甚至在 Kotlin 中可用!)。
@Aspect
class AfterReturningExample {
@AfterReturning(
pointcut = "com.xyz.myapp.CommonPointcuts.dataAccessOperation()",
returning = "retVal")
fun doAccessCheck(retVal: Any) {
// ...
}
}
当然,如果您在建议中需要两者,您也可以将连接点和 return 值绑定到方法参数。