这次小结下拦截器
接口
import javax.ejb.Remote;
@Remote
public interface IMan {
String getName();
void qq();
void mm();
String sayHelp();
}
实现:
import javax.ejb.Stateful;
import javax.interceptor.Interceptors;
/**
* 具有聊QQ和泡MM以及求救三个行为的人对象,还有一个用户名属性。
* @author BeanSoft
*/
@Stateful
@Interceptors({FBI.class})
public class Man implements IMan {
private String name = "BeanSoft";
public void qq() {
System.out.println("我在聊QQ");
}
public void mm() {
System.out.println("我在泡MM");
}
public String sayHelp() {
return "救我,我是" + getName();
}
public String getName() {
return name;
}
}
public class FBI {
@AroundInvoke
public Object before(InvocationContext ctx) throws Exception {
Man man = (Man)ctx.getTarget();
System.err.println("FBI 发现" + man.getName() + "即将正在进行 " +
ctx.getMethod().getName() + " 活动。");
// 禁止张三泡MM
if(ctx.getMethod().getName().equals("mm")) {
System.err.println("FBI 将阻止 " + man.getName() + " 泡MM。");
} else if(ctx.getMethod().getName().equals("sayHelp")) {
System.err.println("FBI 将欺骗 " + man.getName() + " 的朋友告诉他们他很好。");
return "我是 " + man.getName() + " ,我现在过的很好。";
} else {
// proceed() 方法将使原来的方法能够继续执行
Object object = ctx.proceed();
System.err.println("FBI 发现" + man.getName() + "已经完成了 " +
ctx.getMethod().getName() + " 活动。");
return object;
}
return null;
}
JSP页面的拦截测试:
<%
javax.naming.InitialContext ctx = new javax.naming.InitialContext();
interceptor.IMan man = (interceptor.IMan) ctx.lookup("Man/remote");
man.qq();
man.mm();
System.out.println(man.sayHelp());
%>