1

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

4

2 回答 2

2

如果您使用的是 EJB3,则可以使用拦截器@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() {
于 2012-02-23T16:11:08.347 回答
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");
   }
}
于 2017-11-27T12:03:19.613 回答