class BeanCopy {

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

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

        for (Field field : destFields) {
            if (ReflectionUtil.isFinal(field) || ReflectionUtil.hasAnnotation(field, IgnoreField.class)) {
                continue;
            }
            Field srcField = fieldCache.getField(srcClazz, CopyField.class, field.getName());
            if (srcField != null && supportFor(destClazz, srcField.getAnnotation(CopyField.class))) {
                Object value = ReflectionUtil.readField(srcField, src);
                ReflectionUtil.writeField(field, dest, value);
            }

        }

    }

}