gpt4 book ai didi

java - Spring AOP AfterThrowing vs. Around Advice

转载 作者:IT老高 更新时间:2023-10-28 20:53:43 35 4
gpt4 key购买 nike

当尝试实现一个负责捕获和记录某种类型错误的 Aspect 时,我最初认为使用 AfterThrowing 建议可以实现这一点。然而,他的建议似乎没有捕捉到异常,而只是提供了一个额外的入口点来处理异常。

唯一能捕捉到相关异常的建议就是一个 AroundAdvice——要么是那个,要么是我做错了什么。

任何人都可以断言,如果我想捕捉异常,我必须使用 AroundAdvice?我使用的配置如下:

@Pointcut("execution(* test.simple.OtherService.print*(..))")
public void printOperation() {}

@AfterThrowing(pointcut="printOperation()", throwing="exception")
public void logException(Throwable exception) {
System.out.println(exception.getMessage());
}

@Around("printOperation()")
public void swallowException(ProceedingJoinPoint pjp) throws Throwable {
try {
pjp.proceed();
} catch (Throwable exception) {
System.out.println(exception.getMessage());
}
}

请注意,在此示例中,我捕获了所有异常,因为它只是一个示例。我知道吞下所有异常是不好的做法,但是对于我当前的用例,我希望只记录一种特殊类型的异常,同时避免重复的日志记录逻辑。

最佳答案

Spring reference医生说:

"After throwing advice runs when a matched method execution exits by throwing an exception"

到那时捕获异常为时已晚,因为它已经被抛出并且方法已经退出。您对@Around 建议采取的方法是在方法退出之前实际捕获异常并处理它的唯一方法。

关于java - Spring AOP AfterThrowing vs. Around Advice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501955/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com