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();
?}
}
然后如下調(diào)用來初始化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傳遞給其他層進(jìn)行操作,操作完畢,調(diào)用:
?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;
?}
既可以得到哪些字段變化了。
?