Выполнить некоторую логику перед каждым методом bean-компонента без сохранения состояния - PullRequest
1 голос
/ 23 февраля 2012

Мне нужно выполнять логику перед каждым вызовом метода 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 ]

2 голосов
/ 23 февраля 2012

Если вы используете 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() {
1 голос
/ 27 ноября 2017

Небольшая вариация ответа Кэла, мне удалось сделать метод в том же классе, что и объявленный пример (напоминает мне о junits @ Before).

Также не забывайте, что «throws Exception» сигнатуры метода для исключений, сгенерированных из фактического вызова метода внутри 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");
   }
}
...