Spring AOP异常多态性

时间:2012-04-24 15:07:20

标签: java spring inheritance aop spring-aop

我有问题。

即:我正在使用spring aop来处理异常。其中一些是我的异常,如果外部供应商提供的数据损坏,则会抛出这些异常。我在指向某种类型的方面处理它们。比如这个。

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

但是当我的数据处理工作中发生了一些不好的事情,并且它不是错误的数据而是我的逻辑中的错误时,我希望在实例上得到通知。所以我有第二个方面。

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

但是抛出MyException时会触发这两个方面,因为MyException是Exception的实例。

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

1 个答案:

答案 0 :(得分:1)

最简单的,虽然不是很优雅的版本是这样的:

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