读了jboss的那个EJB3文档,找到几个例子介绍了EJB3中interceptor的使用,分为3个层次:
1.default,只能用xml文件进行绑定,将作用于对任何一个bean的任何一次业务方法调用
2.class层次的,将作用于对该bean所有业务方法的调用
3.method层次,将作用于该方法
看起来好象很美,可是我找来找去发现此interceptor只有一个AroundInvoke,也就是类似spring的环绕增加,没有前增强,没有后增强,更没有异常增强了.这也太有限了..既然支持AOP,不应该只提供这么一个看起来很美的特性.
废话少说,以一个class层次的interceptor为例,我们用此interceptor来计算各个业务方法调用所耗费的时间,代码与spring基本类似,或者说AOP联盟的接口很相似:
package com.denny_blue.ejb3.interceptors;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
public class TimerInterceptor {
@AroundInvoke
public Object intercept(InvocationContext ctx) throws Exception
{
System.out.println("*** AccountsInterceptor intercepting " + ctx.getMethod().getName());
try
{
long t1=System.currentTimeMillis();
Object obj=ctx.proceed();
long t2=System.currentTimeMillis();
System.out.println("此方法执行时间为:"+(t2-t1));
return obj;
}
finally
{
System.out.println("*** AccountsInterceptor exiting");
}
}
}
此类很简单,打印拦截的方法,以及打印此方法执行的时间.interceptor写好了,怎么用呢?以我的上一篇文章为例,只要在@Interceptors多加上这个类就可以了,如:
@Interceptors({CountCallBacks.class,TimerInterceptor.class})
public @Stateful class CounterBean implements Counter {
.................
.................
如此这般,你将在服务器后台看到打印的拦截每个方法,并计算此方法执行时间.不算十分有趣,但也许也还实用.
![]() |
谢亚龙逼女足姑娘作检讨(图)
“安静”为啥成裁判口头语?
姚明私下发给刘翔的短信
|
![]() |
曝光:姚明小时候与可爱女生合影(图) 组图:隋菲菲私家相册 率性美感领衔女篮 |
![]() |
![]() |
![]() |


档案
日志
相册
视频








评论
想第一时间抢沙发么?