最近刚接触 springboot 切面编程的相关内容,有个问题网上没太找到相关的解答,想问一下家人们~ 我现在定义了一个 @AfterReturning 的方法,在这个方法我执行了一个线程休眠 10 秒的操作。 但是我调用加入这个切点的方法时,为什么是需要调用 10 秒才能返回呀,这个 @AfterReturning 不是在方法执行完成返回结果之后执行的么? 相关代码如下:
@Pointcut("@annotation(com.ice.hilf.contentmoderation.annotation.PicModeration)")
public void picPointcut() {}
@AfterReturning(pointcut = "picPointcut()", returning = "result")
public void doAfterReturning(JoinPoint joinPoint, Object result) throws InterruptedException {
System.out.println("Start aop");
// 休眠,等待图片压缩完成
Thread.sleep(10 * 1000);
System.out.println("End sleep");
}
Controller 层方法上加上切面注解
@PicModeration
@PostMapping("/upload")
@ResponseBody
public ApiResponse<UniFileRtnVO> upload(
@RequestParam("file")MultipartFile file,
@RequestParam(value = "uploadType", required = false)Byte uploadType,
@RequestParam("fileType") Byte fileType){
...
return ApiResponse.success(rtnVO);
}
实际测试时结果就是每次调用这个接口要等 10s 才有返回值,是不是我对 @AfterReturning 的执行原理理解的有问题啊
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.