class BeanCopy {

    public static void copyProperties(Object src, Object dest) {
        if (ObjectUtil.isAnyNull(src, dest)) {
            return;
        }

        Class<?> srcClazz = src.getClass();
        Field[] destFields = fieldCache.getInstanceFields(dest.getClass());

        for (Field field : destFields) {
            if (ReflectionUtil.isFinal(field)) {
                continue;
            }
            Field srcField = fieldCache.getInstanceField(srcClazz, field.getName());
            if (srcField != null) {
                Object value = ReflectionUtil.readField(srcField, src);
                ReflectionUtil.writeField(field, dest, value);
            }

        }
    }

}