如鹏网 大学生计算机学习社区

CowNew开源团队

http://www.cownew.com 邮件请联系 about521 at 163.com

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  363 随笔 :: 2 文章 :: 808 评论 :: 0 Trackbacks

public class DTODataChangeInterceptor implements MethodInterceptor, Serializable
{
 private static final String SET = "set";
 private Set changedPropSet;
 
 public DTODataChangeInterceptor()
 {
  changedPropSet = new HashSet();
 }

 public Object intercept(Object obj, Method method, Object[] args,
   MethodProxy proxy) throws Throwable
 {
  String name = method.getName();

  if (name.startsWith(SET))
  {
   String s = name.substring(SET.length() - 1);
   String propName = StringUtils.firstLowerCase(s);
   changedPropSet.add(propName);
  }

  return proxy.invokeSuper(obj, args);
 }
 
 public Set getChangedPropSet()
 {
  return Collections.unmodifiableSet(changedPropSet);
 }
 
 public void reset()
 {
  changedPropSet.clear();
 }
}

然后如下调用来初始化javaBean

  Enhancer enhancer = new Enhancer();
  enhancer.setSuperclass(destClass);
  enhancer.setCallback(new DTODataChangeInterceptor());
  
  IValueObject newBean = (IValueObject) enhancer.create();

........初始化newBean

  DTODataChangeInterceptor interceptor = InterceptorUtils
//    .getDTODataChangeInterceptor(newBean);
  interceptor.reset();

然后就可以将newBean传递给其他层进行操作,操作完毕,调用:
 public static DTODataChangeInterceptor getDTODataChangeInterceptor(Object obj)
 {
  if(!(obj instanceof Factory))
  {
   return null;
  }
  Factory f = (Factory)obj;
  Callback[] callBacks = f.getCallbacks();
  for(int i=0,n=callBacks.length;i<n;i++)
  {
   Callback callBack = callBacks[i];
   if(callBack instanceof DTODataChangeInterceptor)
   {
    return (DTODataChangeInterceptor)callBack;
   }
  }
  return null;
 }
既可以得到哪些字段变化了。

 

posted on 2006-10-19 01:53 CowNew开源团队 阅读(947) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: