当我的系统引发异常时,应调用以下方法,但不是。仅当我从注释中删除“ throwing”并且将“ Exception”作为参数时,它才有效:

不起作用:

@AfterThrowing(pointcut="execution(public * br.com.ogfi.*.controller.*.*(..))", throwing="e")
public void afterThrowing(Exception e) {
    System.out.println("Test");
}


作品:

@AfterThrowing(pointcut="execution(public * br.com.ogfi.*.controller.*.*(..))")
public void afterThrowing() {
    System.out.println("Test");
}


有人知道我在做什么错吗?

这是整个课程:

package br.com.ogfi.portalbackoffice.aspect;

import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class AfterThrowAdvice {


    @AfterThrowing(pointcut="execution(public * br.com.ogfi.*.controller.*.*(..))", throwing="e")
    public void afterThrowing(Exception e) {
        System.out.println("Boo! We want our money back!");
        //ex.printStackTrace();
        //System.out.println("Boo! We want our money back!");

    }

}

最佳答案

最后,我发现它无法正常工作的原因:

我正在使用的Java项目有他自己的异常,称为SystemException,它的名称与javax.transaction.SystemException相同,但我还没有意识到它不是来自javax。

我项目中的SystemException扩展了Throwable,当我尝试使用Exception作为参数时,未调用我的方法,因为不是同一回事。

09-11 19:14