2012-04-24 4 views
0

У меня проблема.Spring AOP Exception Polymorphism

А именно: Я использую Spring aop для обработки исключений. Некоторые из них являются моими исключениями, которые бросаются в случае поврежденных данных, поставляемых сторонним поставщиком. Я обрабатываю их в аспектах, указывающих на определенный тип. Такие, как этот.

@AfterThrowing(
    pointcut = 
     "execution(*myClass.myDataProcessingMethod(..))", 
    throwing = "ex" 
) 
public void myAspectMethod(MyException ex) { 
... 
} 

Но когда что-то плохое happends в моей обработке данных работы, и это не дефектные данные, но ошибка в моей логике, я хочу получать информацию о инстанции. Поэтому у меня есть второй аспект.

@AfterThrowing(
    pointcut = 
     "execution(*myClass.myDataProcessingMethod(..))", 
    throwing = "ex" 
) 
public void myAspectMethod(Exception ex) { 
    extraInformingService.informAdamAtOnce("shitjustgotreal"); 
} 

Но когда вызывается MyException, оба аспекта увольняются, потому что MyException является экземпляром Exception to.

Есть ли способ запустить только метод, указывающий на MyException?

ответ

1

Самый простой, хотя и не очень элегантный вариант заключается в следующем:

@AfterThrowing(
    pointcut = 
     "execution(*myClass.myDataProcessingMethod(..))", 
    throwing = "ex" 
) 
public void myAspectMethod(Exception ex) { 
    if(!ex instanceof Myexception){ 
     extraInformingService.informAdamAtOnce("shitjustgotreal"); 
    } 
} 
+0

Да я думал об этом, но так как есть много «моих» исключений она будет расти от «не очень элегантно», чтобы неприемлемо. Спасибо anyways :-) –

+1

Но, может быть, если я создам абстрактный класс, который будет базой наследования для всех «моих» исключений, он завершится только одним оператором if. Спасибо^2: D –