jackyrong

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  这次小结下拦截器

 

接口

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());
%>

 

posted on 2008-08-22 18:45  jackyrong的世界  阅读(300)  评论(0编辑  收藏  举报