为什么org.aopalliance.intercept.Joinpoint#proceed throws Throwable?

时间:2017-11-21 08:06:32

标签: java spring aop spring-aop

我正在处理Spring AOP,我的代码就像 -

@Component
public class MyClass implements MethodInterceptor{

    @Override
    public Object invoke(MethodInvocation invocation){        
      //some code here
        try {
            return joinPoint.proceed();
             } catch (Throwable throwable) {
                throw Throwables.propagate(throwable);
             }
        }
  }

由于处理Throwable不是推荐的(因为它也包含错误),我想避免这种情况。 但是,我很想知道为什么org.aopalliance.intercept.MethodInterceptor首先抛出throwable?抛出异常应该不够?

1 个答案:

答案 0 :(得分:0)

要回答这个问题,我们需要查看org.aopalliance.intercept.Joinpoint#proceed的目的(按照docs

  

继续进行链中的下一个拦截器。

这意味着它将拦截链中的下一个方法执行。调用时的实际方法可以抛出任何类型的Exception和/或Error没有办法确保/限制方法不这样做是建议与否)。

因此,要足够通用(并且还与传统/第三方/库代码兼容),AOPAlliance的开发人员必须有意识地决定抛出最高级别的等级{{1} }。

希望这有帮助!