拦截器绑定不起作用

时间:2017-04-28 13:40:07

标签: java cdi interceptor

我有用javax.interceptor.InterceptorBinding @LogBinding注释的CDI拦截器类,定义如下:

@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface LogBinding {}

然后我在EJB bean上使用注释:

@Alternative
@Stateless
@LogBinding 
public class FooService {

    @Asynchronous
    public fooMethod() {

    }
}

我从另一个bean调用fooMethod。问题是拦截器没有被调用。当我在FooService上将@LogBinding注释更改为@Interceptors({LogInterceptor.class})时,一切正常。 我不知道它是否有影响,但FooService的市场是@Alternative,因为它在其他地方作为EJB bean注入,下面是生产者字段:

@Default
@Produces
@EJB
private FooService fooService;


@Interceptor
@LogBinding
@Priority(Interceptor.Priority.APPLICATION)
public class LogInterceptor {
  @AroundInvoke
    public Object invoke(final InvocationContext invocationContext) throws Exception {
    System.out.println("it works");
    }
}

为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

你还必须使用该绑定来注释你的拦截器类,以便它知道哪个类用作拦截器

@LogBinding
@Interceptor
public class LogInterceptor {...}