【问题标题】:Can we call joinpoint.proceed with arguments in Spring AOP我们可以在 Spring AOP 中使用参数调用 joinpoint.proceed
【发布时间】:2020-05-12 21:03:24
【问题描述】:

我正在尝试使用成批的参数调用 joinpoint.proceed。 可以打电话吗。

我找不到任何我们对参数进行分区或创建新参数然后对它们调用 joinpoint.proceed 的示例。

【问题讨论】:

  • 欢迎来到 SO。请编辑您的问题并显示解释您想要做什么的示例代码。您的问题不清楚,人们必须猜测您想要什么,正如您可以在 R.G 的回答中看到的那样。不过,分析和随后的精确答案比猜测要好得多。所以请了解MCVE 是什么并写一个。谢谢。

标签: aop spring-aop


【解决方案1】:

这就是你要找的吗?

@Service
public class AdditionService {
    public Integer sum(List<Integer> list) {
        Integer sum = 0;
        for (Integer i : list) {
            sum += i;
        }
        System.out.println("Sum :" + sum);
        return sum;
    }
}

以及批量求和的一个方面

@Aspect
@Component
public class ExampleAspect {
    @Around("execution(* com.package..*.sum*(..)) && within(com.package..*) && args(list)")
    public Integer around(ProceedingJoinPoint pjp, List<Integer> list) throws Throwable {
        Object[] args = pjp.getArgs(); // get the arguments array
        Integer sum = 0;
        for (int i = 0; i < 10; i += 5) {
            args[0] = (list.subList(i, i + 5)); // modify the arguments array
            System.out.println(args[0]);
            sum += (Integer) pjp.proceed(args);
        }
        return sum;
    }
}

访问的服务 bean 如下所示

Integer[] a= {1,2,3,4,5,6,7,8,9,10};
Integer sum = 0;
sum = service.sum(Arrays.asList(a));
System.out.println("Total : "+sum);

将以下内容打印到控制台

[1, 2, 3, 4, 5]
Sum :15
[6, 7, 8, 9, 10]
Sum :40
Total : 55

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2021-02-19
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多