Spring AOP @Afterreturning 方面阻止 api 调用

问题描述 投票:0回答:1

我有一个@Afterreturning 方面。

@AfterReturning(value = "@annotation(****)",returning = "returnValue")
    public void auditableUponReturn(final JoinPoint joinPoint, Object returnValue) {
       //takes 500 ms
      }

我有一个调用此方面的端点

@GetMapping("/{id}")
    @AspectInvoker
    public Name getName(){
       //takes 100 ms
    }

当我调用此端点时,我预计此端点需要 100 毫秒并在我的方面相关代码正在处理时立即返回。但在方面相关代码完成之前,端点不会返回。

这是预期的吗?有什么方法可以解决这个问题,以便 api 的性能不受方面相关代码的影响?

java spring spring-boot aop spring-aop
1个回答
0
投票

是的,您所经历的行为是预期的。原因是您注册的方面与您的端点在同一线程中运行。

您可以利用

@Async
(与
@EnableAsync
一起)在单独的线程中执行方面逻辑。 但是这种方法会在每次调用方法时创建一个新线程。与方面的同步执行相比,这是否会给您带来显着的性能优势是值得怀疑的。

您可能会发现此线程有助于更全面地理解:如果我将 @Async 方法放在切面上,它会异步执行吗?

© www.soinside.com 2019 - 2024. All rights reserved.