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

文章作者 100test 发表时间 2007:03:14 17:35:35
来源 100Test.Com百考试题网


  为了巩固 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 集合中。



相关文章


基于OSGi搭建动态化的系统
应聘Java笔试时可能出现问题及其答案(四)
应聘Java笔试时可能出现问题及其答案(五)
一个中国人看JAVA
CGLib实现变化字段探测的供能
SCJP考试心得分享
应聘Java笔试时可能出现问题及其答案(二)
struts标签使用举例--logic篇
SWT中模拟AWT的BorderLayout
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛