khi cố gắng thực hiện một Aspect, chịu trách nhiệm bắt và ghi lại một loại lỗi nhất định, ban đầu tôi nghĩ điều này có thể thực hiện được bằng cách sử dụng lời khuyên sau khi thực hiện. Tuy nhiên có vẻ như lời khuyên của anh ta không bắt được ngoại lệ, nhưng chỉ cung cấp một điểm vào bổ sung để làm điều gì đó với ngoại lệ.Spring AOP AfterThrowing vs. Around Advice
Lời khuyên duy nhất cũng sẽ bắt ngoại lệ trong câu hỏi sau đó sẽ là một AroundAdvice - hoặc là điều đó hoặc tôi đã làm điều gì đó sai trái.
Có ai có thể khẳng định rằng thực sự nếu tôi muốn bắt ngoại lệ, tôi phải sử dụng AroundAdvice? Cấu hình tôi đã sử dụng sau:
@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());
}
}
Lưu ý rằng trong ví dụ này, tôi đã phát hiện tất cả Ngoại lệ, vì nó chỉ là một ví dụ. Tôi biết thực hành xấu của nó chỉ nuốt tất cả các trường hợp ngoại lệ, nhưng đối với trường hợp sử dụng hiện tại của tôi, tôi muốn một loại ngoại lệ đặc biệt chỉ được ghi lại trong khi tránh logic ghi trùng lặp.
Bạn thực sự sẽ không sử dụng cả hai lời khuyên và sau khi đưa ra lời khuyên trên cùng một điểm tham gia như thế này. Lời khuyên xung quanh là toàn diện và cho phép bạn hoàn toàn kiểm soát việc thực hiện. Vì không thể loại bỏ một ngoại lệ ra khỏi lời khuyên xung quanh của bạn (vì khối try/catch mà bạn không loại bỏ ngoại lệ), lời khuyên sau khi ném sẽ không bao giờ được áp dụng. –