2013-09-27 3 views
1

Просьба разъяснить нижеследующее: Вопрос: Почему @AfterTrowing совет выполняется первым, а затем исключается исключение. Исходя из определения, я должен увидеть исключение первого, а затем @AfterThrowingSpring AOP AfterTrowing issue

public class LoggingAspect { 


     @AfterThrowing(value = "execution(public void setName(String))") 
     public void afterSetNameAdvice(JoinPoint joinPoint) { 
      System.out.println("After:"+joinPoint.toString()); 
      } 

     @Before(value = "execution(public void setName(String))") 
     public void beforeSetNameAdvice(JoinPoint joinPoint) { 
      System.out.println("Before:"+joinPoint.toString()); 
      } 

SetName Method: 

    public void setName(String name) { 
     this.name = name; 

     throw(new ArithmeticException()); 

    } 

Output: 

Before:execution(void com.spring.Employee.setName(String)) 
After:execution(void com.spring.Employee.setName(String)) 
Exception in thread "main" java.lang.ArithmeticException 
    at com.spring.Employee.setName(Employee.java:41) 

Редактирование поста и добавление ответа ниже Я считаю, что это ответ, но я не уверен. Кто-то, пожалуйста, подтвердите. Internally Spring создает класс прокси, расширяющий действительный целевой класс (где у вас есть точка объединения). Метод точки соединения переопределен и достигнуты концепции АОП.

перекрываться точку в прокси-классе Регистрация:

SetName() {
Вызов @Before Advice
вызовов Присоединяйтесь точка - исключение первоначально брошено здесь.
Call @After Throwing Advice
// Работа с кадрами не может сначала вызвать исключение, так как оно потеряет дескриптор для запуска @AfterTrowing Advice в переопределенном методе setName(). Таким образом, первый @ после предупреждения броска выполняется и исключение исключено
}

+1

Я думаю, что после бросания приходит перед ловлей. – Bart

ответ

0

Почему вы должны сначала увидеть исключение? В основном AfterThrowing, поскольку после исключения выбрано из метода. AfterThrowing может обрабатывать или изменять исключение. Так что это произойдет до улова.