AspectA中@After和@AfterThrowing之间的区别

时间:2012-08-07 14:43:24

标签: java log4j aspectj

我无法理解为什么在这种情况下应用建议@After而不是@AfterThrowing

    @Pointcut("execution(* componentB.Bye.run())")
    public void newThread(){
    }

    @After("newThread()")
    public void cokolwiek2(JoinPoint joinPoint){
        report(joinPoint);
    }

    @AfterThrowing(pointcut="newThread()",throwing="e")
public void itsAFoo(JoinPoint joinPoint, RemoteException e) {
        logger.error(joinPoint.getSignature().toLongString() + " exception here!");
}

我确信会抛出异常:

public String greeting(String c) throws RemoteException,
        InterruptedException {
    throw new RemoteException();
    //return "Good morning!";
}

但是没有exception here!

的日志

1 个答案:

答案 0 :(得分:2)

切入点execution(* componentB.Bye.run())未涵盖方法public String greeting(String c)

@After@AfterThrowing之间的区别在于仅在发生异常时调用@AfterThrowing,而在抛出异常或返回方法时调用@After成功。因此,如果存在异常并且您同时拥有这两个建议,则它们都将被执行。