gpt4 book ai didi

java - Spring AOP : Parameter passed as null for an interface with @Around aspect

转载 作者:行者123 更新时间:2023-12-01 14:07:33 25 4
gpt4 key购买 nike

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

      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 的调用代码中,我总是将 method2 的参数 param1 设置为 null。如果我删除上面的 @Around("execution(* Interface1.method1(..))") ,它就可以正常工作。为它们添加 @Around 的原因是为了捕获异常以进行日志记录和审计目的,并阻止其余异常的传播。

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

最佳答案

看起来你的方面有缺陷。环绕方面应始终具有Object返回类型,而不是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;
}

关于java - Spring AOP : Parameter passed as null for an interface with @Around aspect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18783581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com