AroundInvoke:奇怪的名字?

AroundInvoke: Curious name?

请求有关此拦截器注释的更多信息。为什么拦截器注解叫@AroundInvoke 而不是@BeforeInvoke?

例如,我可以在操作 API 之前调用访问验证吗?在实际调用方法之前完成访问验证的保证是什么? VM 或 CDI 实现是否做了一些不阻止实际调用但并行执行此拦截器的事情?

如果我使用 Google Guice AOP Method Interceptors,我确信访问验证失败将决定方法调用是否开始。我如何确定雅加达 CDI 的类似行为?

未能在规范中找到此信息

可以找到相关问题here。但上述确切问题仍未得到解答。

@AroundInvoke 被调用是因为它可以在实际调用的方法之后 之前执行 both 操作。查看 the documentation 及其示例:

@AroundInvoke
public Object intercept(InvocationContext ctx) throws Exception { ... }

在该方法中,您可以调用 ctx.proceed() 来调用目标方法(或任何其他拦截器)。当你在 before 调用时,你会在 before 方法和你在 after 调用时执行任何操作发生 方法被调用之后。因此它“围绕”该方法。

样本:

@AroundInvoke
public Object intercept(InvocationContext ctx) throws Exception {
   log.info("We're about to do the thing!");
   Object result = ctx.proceed();
   log.info("We did the thing!");
   return result;
}