我需要在无状态bean方法中的每次调用之前执行逻辑。
示例:
class MyStatelessBean
{
void myPreExecutionLogic()
{
System.out.println("pre method execution logic");
}
void method1()
{
System.out.println("method 1");
}
void method2()
{
System.out.println("method 2");
}
}
有一种方法可以使用EJB吗?注册某种监听器或注释myPreExecutionLogic,如@PreConstruct?
答案 0 :(得分:2)
如果您使用的是EJB3,则可以使用Interceptors和@AroundInvoke
使用@AroundInvoke注释设置拦截器类
public class MyInterceptor {
@AroundInvoke
public Object doSomethingBefore(InvocationContext inv) {
// Do your stuff here.
return inv.proceed();
}
}
然后使用类名
注释您的ejb方法public class MyStatelessBean {
@Interceptors ( {MyInterceptor.class} )
public void myMethod1() {
答案 1 :(得分:1)
Kal的答案有点变化,我设法使该方法与声明的例子在同一个类中(让我想起junits @Before)。
另外,请不要忘记ctx.proceed()
class MyStatelessBean
{
@AroundInvoke
public Object myPreExecutionLogic(InvocationContext ctx) throws Exception{
System.out.println("pre method execution logic");
return ctx.proceed();
}
void method1()
{
System.out.println("method 1");
}
void method2()
{
System.out.println("method 2");
}
}