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

Java 在每个无状态bean方法之前执行一些逻辑,java,events,ejb,stateless-session-bean,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() {

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

如果您使用的是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() {

Kal的答案有一点变化,我设法使该方法与示例声明的类在同一个类中(让我想起junits@Before)

另外,不要忘记方法签名的“throws Exception”,用于从
ctx.procedure()中的实际方法调用引发的异常

嗯,好的。我阅读了你提到的文章,并得出结论,下面的例子将解决我的部分问题。”类MyStatelessBean{@AroundInvoke void myPreExecutionLogic(InvocationContext InvocationContext)
{System.out.println(“方法前执行逻辑”);
}void method1(){System.out.println(“方法1”);}}在抽象超类中有这样做的方法吗?我需要拦截所有的子类方法。@Wagner--是的。您可以在超类本身上定义拦截器。然后所有子类方法都将被拦截。
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");
   }
}