2016-11-17 6 views
0

Я определил два совета AfterTrowing для обработки исключений с одним и тем же pointcut.Обработка определенного типа исключения

@AfterThrowing(pointcut="...", throwing="ex") 
public void method1(Exception ex) {} 


@AfterThrowing(pointcut="...", throwing="ex") 
public void method2(GatewayException ex) {} 

Есть ли способ предотвратить, чтобы общий метод1 выполнялся, если исключение является исключением GatewayException?

Любые идеи, высоко оценили

C

ответ

0

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

@AfterThrowing(pointcut="...", throwing="ex") 
public void method1(Exception ex) { 
    if (ex instanceof GatewayException) { 
     return; 
    } 
    // handle the more generic Exception case 
} 


@AfterThrowing(pointcut="...", throwing="ex") 
public void method2(GatewayException ex) { 
    // handle the more specific GatewayException 
} 

Я знаю, что вы ожидали решения, основанного на некоторой конструкции языка AspectJ, но дело в том, что такой конструкции нет.

+0

Да, я надеялся избежать экземпляра, но я думаю, что вы правы. – Cathal