首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
中国IT实验室Linux频道
中国IT教育
 
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 核心技术 >> 高级编程 >> 文章正文

CGLib实现变化字段探测的供能

文章来源BlogJava 作者佚名 更新时间2007-2-25 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

为了巩固 CGLib 的知识,下面我们实现一个稍微复杂一点的例子。

例、请实现一个拦截器,使其能够检测一个 JavaBean 的哪些字段改变了。

1 )首先定义一个 JavaBean

public class PersonInfo

{

     private String name;

 

     private String email;

 

     private int age;

 

     private String address;

 

     public String getEmail()

     {

         return email;

     }

 

     public void setEmail(String email)

     {

         this.email = email;

     }

 

     public String getName()

     {

         return name;

     }

 

     public void setName(String name)

     {

         this.name = name;

     }

 

     public String getAddress()

     {

         return address;

     }

 

     public void setAddress(String address)

     {

         this.address = address;

     }

 

     public int getAge()

     {

         return age;

     }

 

     public void setAge(int age)

     {

         this.age = age;

     }

}

2 )定义一个 MethodInterceptor ,这一步是最关键的

import java.lang.reflect.Method;

import java.util.Collections;

import java.util.HashSet;

import java.util.Set;

 

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;

 

public class JavaBeanDataChangeInterceptor implements MethodInterceptor

{

     private static final String SET = "set";

 

     private Set changedPropSet;

 

     public JavaBeanDataChangeInterceptor()

     {

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

              changedPropSet.add(s);

         }

         return proxy.invokeSuper(obj, args);

     }

 

     public Set getChangedPropSet()

     {

         return Collections.unmodifiableSet(changedPropSet);

     }

 

     public void reset()

     {

         changedPropSet.clear();

     }

}

定义一个集合 changedPropSet 用来存放修改了的字段名,增加了一个方法 reset 用来清空此集合,增加了一个 getChangedPropSet 方法用来供外界得到修改了的字段,为了防止调用者对 changedPropSet 做修改,因此我们采用 Collections.unmodifiableSet 对返回的集合进行不可修改的修饰。

intercept 方法中,我们判断如果被调用的方法以 set 开头,则把此字段名放入 changedPropSet 集合中。

 

[1] [2] 下一页  

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·超前体验 Oracle 11g的5个新特性
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题
 ·展现C#世界 C#程序设计专题
 ·Java入门 Tomcat的配置技巧精华专题
 ·Oracle RMAN物理备份技术详解
 ·JAVA开发利器——JBuilder知多少
 ·Hello,web2.0技术进阶专题
 ·从入门到精通 java初学者实践系列教程
 ·JAVA 与 .NET两强对垒 到底该选什么?
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航