Java 在每个无状态bean方法之前执行一些逻辑
在无状态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() {
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");
}
}