我正在阅读有关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
的方法)以及何时被删除?
答案 0 :(得分:4)
默认情况下,调用方法时拦截器的顺序为
外部拦截器
默认拦截器(如果存在)
类拦截器(如果存在)
方法拦截器(如果存在)
bean类上的拦截器方法(使用@AroundInvoke
)
在每个组(默认,类,方法)中,拦截器的顺序是从@Interceptors
注释中定义的从左到右,然后是XML
拦截器。
对于第二个问题 - @AroundTimeout
与EJB计时器一起使用,每当使用@Schedule
超时注释的方法时都会触发拦截器 - 请参阅此example.