在每个无状态bean方法之前执行一些逻辑

时间:2012-02-23 16:01:28

标签: java events ejb stateless-session-bean

我需要在无状态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?

2 个答案:

答案 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");
   }
}