1

我有以下情况:

@Interceptors(MyInterceptClass.class)
public void ejbMethod1()
{

}


@Interceptors(MyInterceptClass.class)
public void ejbMethod2()
{
    ejbMethod1();
}

调用 ejbMethod2 会导致执行两个拦截器调用吗?

谢谢。

4

1 回答 1

0

我假设您的意思是@Interceptors(复数)注释,它定义了将在带注释的方法调用时调用的拦截器类。@Interceptor注释(单数)用于注释作为拦截器的类。

如果是这样,那么简短的回答是:

拦截器由容器执行。如果你的方法调用不会通过容器,那么它就不会被拦截。

因此,以下调用ejbMethod1()

@Interceptors(MyInterceptClass.class) 
public void ejbMethod2() {
    ejbMethod1(); 
}

不会激活,MyInterceptClass因为它是本地调用(非 EJB 调用)。

如果你想再次调用拦截器,你应该使用业务接口,比如:

// Somewhere in the class
@Resource
SessionContext ctx;

@Interceptors(MyInterceptClass.class) 
public void ejbMethod2() {
    // This is explicit call which will go through the EJB Container
    ctx.getBusinessObject(YourEJBClass.class).ejbMethod1();
}

这将进行 EJB 感知调用,并在调用ejbMethod1().

于 2011-11-29T13:26:25.780 回答