Spring AOP - @AfterThrowing

时间:2015-10-15 19:10:18

标签: java spring aspectj aspect

当我的系统抛出异常时,应该调用下面的方法,但它不是。它只适用于我删除' throw'从注释和“例外”#39;作为参数:

不起作用:

@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!");

    }

}

1 个答案:

答案 0 :(得分:2)

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

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

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