【问题标题】:In which order are Interceptors excecuted?拦截器按什么顺序执行?
【发布时间】:2013-11-26 10:48:57
【问题描述】:

我正在阅读一些关于 java ee 中Interceptors 的教程,但是有些主题没有得到广泛的介绍。因此,如果有人回答了以下问题,我将不胜感激:

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

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

我的印象是先执行了taget类Interceptor,也就是上面例子中的last方法,然后按照注解里面指定的顺序执行了两个类级别的Interceptor。我对吗?

2) 什么是Timeout Interceptors(包含带有注解@AroundTimeout的方法),什么时候执行?

【问题讨论】:

    标签: jakarta-ee ejb interceptor


    【解决方案1】:

    引用documentation

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

    • 外部拦截器

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

    • 类拦截器(如果存在)

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

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

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

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

    【讨论】:

    • 这个文档说“...然后是 XML 拦截器。”这意味着顺序是注释然后是 XML。为什么我在拦截器规范中找不到它(我认为这只是 Jboss 的文档,可能与其他文档不同)?
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多