我有以下情况:
@Interceptors(MyInterceptClass.class)
public void ejbMethod1()
{
}
@Interceptors(MyInterceptClass.class)
public void ejbMethod2()
{
ejbMethod1();
}
调用 ejbMethod2 会导致执行两个拦截器调用吗?
谢谢。
我有以下情况:
@Interceptors(MyInterceptClass.class)
public void ejbMethod1()
{
}
@Interceptors(MyInterceptClass.class)
public void ejbMethod2()
{
ejbMethod1();
}
调用 ejbMethod2 会导致执行两个拦截器调用吗?
谢谢。
我假设您的意思是@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()
.