0

我在配置为 Spring bean 的两个接口中使用 @Around 时遇到问题。其中一个接口是另一个接口的参数,并且总是作为空值传递。以下是代码片段

      public interface Interface1 {
          public void method1();
      }

      public interface Interface2 {
          public void method2(Interface1 param1);
      }

      @Around("execution(* Interface1.method1(..))")
      private void interceptor1(ProceedingJoinPoint pJoinPoint) throws Throwable{
        //do something
      }

       @Around("execution(* Interface2.method2(..))")
      private void interceptor2(ProceedingJoinPoint pJoinPoint) throws Throwable{
        //do something
      }

在对 Interface2 的调用代码中,我总是将参数 param1 到 method2 为 null。如果我删除上面的 @Around("execution(* Interface1.method1(..))") 它工作正常。为它们添加@Around 的原因是为了捕获异常以进行日志记录和审计,并阻止其余异常传播。

你能帮我解决这个问题吗?

4

1 回答 1

1

看起来你的方面有缺陷。环绕方面的返回类型应始终Object为not void。返回 void 基本上会破坏调用堆栈中返回值的正确传递,请记住 around 方面将代码放在您的方法执行周围!

因此,将您的方面更改为返回对象并始终将调用结果返回到proceed()

public Object aroundAdvice(ProceedingJoinPoint pjp) {
  // Your stuff to do before the method call here
  Object returnValue = pjp.proceed();
  // Your stuff to do after the method call here
  return returnValue;
}
于 2013-09-13T11:04:49.780 回答