拦截器执行的顺序是什么?

时间:2013-11-26 10:48:57

标签: java-ee ejb interceptor

我正在阅读有关java ee中Interceptors的一些教程,但有一些主题未被广泛讨论。因此,对于回答以下问题的人,我会很高兴:

1)如果目标类包含@AroundInvoke方法,拦截器的执行顺序为:

@Interceptors({PrimaryInterceptor.class, SecondaryInterceptor.class})
@Stateful
public class OrderBean {
...
    @AroundInvoke
    private void last(InvocationContext ctx) { ... }
...
}

我的印象是,首先它是taget类拦截器,即上述情况下的last方法,然后是注释内指定顺序的两个类级拦截器。我对吗?

2)什么是Timeout Interceptors(包含注释@AroundTimeout的方法)以及何时被删除?

1 个答案:

答案 0 :(得分:4)

引用documentation

默认情况下,调用方法时拦截器的顺序为

  • 外部拦截器

  • 默认拦截器(如果存在)

  • 类拦截器(如果存在)

  • 方法拦截器(如果存在)

  • bean类上的拦截器方法(使用@AroundInvoke

在每个组(默认,类,方法)中,拦截器的顺序是从@Interceptors注释中定义的从左到右,然后是XML拦截器。

对于第二个问题 - @AroundTimeout与EJB计时器一起使用,每当使用@Schedule超时注释的方法时都会触发拦截器 - 请参阅此example.