CDI拦截器范围注释

时间:2015-04-22 18:21:36

标签: java java-ee cdi java-7

上下文:

带有Wildfly 8.1.0

CDI 1.2

根据CDI的{​​{1}}规范,如果注释CDI1.2

,则无需在beans.xml中声明cdi

但是,除非我添加@Priority(somepriorityvalue)注释

,否则永远不会调用以下cdi拦截器
@Dependent

和拦截器绑定:

@RequiresLoggedInAccount
@Interceptor
@Priority(Interceptor.Priority.APPLICATION)
public class MyInterceptor {

  @AroundInvoke
  public Object intercept(final InvocationContext ic) throws Exception {
    //intercept something and then...
    return ic.proceed();
  }
}

请注意,拦截器绑定和拦截器是在不同的jar模块中定义的(因此@Priority的目的)。

这是我忽略的吗?为什么我必须为拦截器添加@Inherited @Documented @InterceptorBinding @Target({METHOD, TYPE}) @Retention(RUNTIME) public @interface RequiresLoggedInAccount { } 的{​​{1}}范围?

是不是因为我在CDI @Dependent

中有明确说明

1 个答案:

答案 0 :(得分:0)

WildFly 8.1附带Weld 2.1.x(我忘了x,但2.1符合CDI 1.1)。您可以对其应用补丁以升级到符合CDI 1.2的Weld 2.2,这个问题应该为您解决。

您所看到的行为与CDI 1.1实施一致。