@Override public Object intercept( final Object proxy, final Method method, final Object[] args, final MethodProxy methodProxy) throws Throwable { final String methodName = method.getName(); if (logger.isDebugEnabled()) { logger.debug( "Intercept ModelInterceptor : " + method.getName() + " " + methodProxy.getSuperName()); } if (methodName.startsWith("set")) { final Field property = FieldUtils.getField(model.getClass(), methodName.substring(3)); if (property != null && (args != null && args.length == 1) && !property.isAnnotationPresent(Transient.class)) { final String propertyName = property.getName().toUpperCase(); final BaseModel baseModel = (BaseModel) model; final Set<String> m$aop = baseModel.getM$aop(); if (!m$aop.contains(propertyName)) { if (!createdByInstance) { // 如果是用类名创建代理时,只要是赋过值,就算变更 baseModel.addM$aop(propertyName); } else { final Object originValue = FieldUtils.readField(model, property); if (!ObjectUtils.isEquals(originValue, args[0])) { baseModel.addM$aop(propertyName); } } } } } if ("finalize".equals(methodName)) { model = null; return methodProxy.invokeSuper(proxy, args); } else { return MethodUtils.invokeMethod(model, method, args); } }