首页 > 解决方案 > AroundInvoke:好奇的名字?

问题描述

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

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

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

未能在规范中找到此信息

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

标签: javacdiinterceptor

解决方案


@AroundInvoke之所以这样称呼,是因为它可以在实际调用的方法之前和之后都起作用。查看文档及其示例:

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

在该方法中,您可以调用ctx.proceed()以调用目标方法(或任何其他拦截器)。当您在该调用之前执行某些操作时,您会该方法之前执行任何操作,而您该调用之后执行的任何操作都发生该方法被调用之后。因此,它是“围绕”该方法的。

样本:

@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;
}

推荐阅读