java - AroundInvoke:好奇的名字?
问题描述
请求有关此拦截器注释的更多信息。为什么拦截器注解叫@AroundInvoke 而不是@BeforeInvoke?
例如,我可以在操作 API 之前调用访问验证吗?在实际调用方法之前完成访问验证的保证是什么?虚拟机或 CDI 实现是否有一些不阻止实际调用但并行执行此拦截器的操作?
如果我使用的是Google Guice AOP Method Interceptors,我确信访问验证失败将确定方法调用是否开始。我如何向自己保证雅加达 CDI 的类似行为?
未能在规范中找到此信息
可以在此处找到相关问题。但上述确切问题仍未得到解答。
解决方案
@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;
}