al intentar implementar un aspecto, que es responsable de atrapar y registrar un cierto tipo de error, al principio pensé que esto sería posible usando el consejo de AfterThrowing. Sin embargo, parece que su consejo no capta la excepción, sino que proporciona un punto de entrada adicional para hacer algo con la excepción.Spring AOP AfterThrowing vs. Around Advice
El único consejo que también captaría la excepción en cuestión sería entonces un AroundAdvice, ya sea eso o hice algo mal.
¿Alguien puede afirmar que, de hecho, si quiero ver la excepción, tengo que usar un AroundAdvice? La configuración que utilicé sigue:
@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());
}
}
Tenga en cuenta que en este ejemplo capté todas las excepciones, porque es solo un ejemplo. Sé que es una mala práctica el solo tragar todas las excepciones, pero para mi caso de uso actual quiero que solo se registre un tipo especial de excepción mientras se evita la lógica de registro duplicado.
Realmente no usarías ambos consejos y después de lanzar consejos sobre el mismo punto de unión como este. Around advice es holístico y te permite controlar completamente la ejecución. Dado que no es posible excluir una excepción de su recomendación de acercamiento (debido al bloque try/catch que tiene, que no vuelve a lanzar la excepción), el consejo posterior al lanzamiento nunca se aplicará. –