2012-04-24 63 views
0

我遇到问题。春季AOP异常多态性

即:我使用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的实例。

有没有办法只触发指向MyException的方法?

回答

1

最简单的,尽管不是很优雅版是这样的:

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

是的,我想过这个问题,但由于存在大量的“我的”例外它将从“不太雅”长到不能接受的。无论如何:-) – 2012-04-24 17:25:16

+1

但是,也许如果我创建抽象类,将作为所有“我”的异常继承的基础,它将只在一个if语句结束。谢谢^ 2:D – 2012-04-24 17:27:44