docs: private static String getMethodImplCode(Integer sequence, Class<?> sourceClass, Class<?> targetClass, boolean deepCopy, final Map<String, PropConverter<?, ?>> propCvtMap) throws Exception {
  
          StringBuilder methodCode = new StringBuilder();
          methodCode.append("public void copyProps(").append(Object.class.getName()).append(" sourceObj, ").append(Object.class.getName()).append(" targetObj){\n");
          methodCode.append(sourceClass.getName()).append(" source = ").append("(").append(sourceClass.getName()).append(")sourceObj;\n");
          methodCode.append(targetClass.getName()).append(" target = ").append("(").append(targetClass.getName()).append(")targetObj;\n");
  
          // 这里查找了包括父类的属性
          Field[] targetFields = ReflectionUtils.findFields(targetClass);
  
          for (Field field : targetFields) {
              if (!Modifier.isStatic(field.getModifiers())) {
                  // 是否含有set方法
                  String methodNameSuffix = capitalize(field.getName());
                  Class<?> targetFieldClass = field.getType();
  
                  Method setMethod = ReflectionUtils.findMethod(targetClass, "set" + methodNameSuffix, targetFieldClass);
                  if (setMethod == null) {
                      setMethod = ReflectionUtils.findMethod(targetClass, "set" + field.getName(), targetFieldClass);
                      if (setMethod != null) {
                          methodNameSuffix = field.getName();
                      }
                  }
                  if (setMethod != null) {
  
                      // 查看这个属性是否有 PropConverter
                      if (propCvtMap != null && propCvtMap.containsKey(field.getName())) {
  
                          String converterName = field.getName() + "Converter";
                          String converterType = PropConverter.class.getName();
  
                          methodCode.append(converterType).append(" ").append(converterName).append(" = (").append(converterType).append(")")
                                  .append(BeanCopierFactory.class.getName()).append(".getConverter(").append(sequence).append(",").append("\"").append(field.getName()).append("\");\n");
                          methodCode.append("target.").append(setMethod.getName()).append("(")
                                  .append("(").append(targetFieldClass.getName()).append(")").append(converterName).append(".convert(").append("source").append(")")
                                  .append(");\n");
                          continue;
                      }
  
                      // set方法存在,看是否 sourceClass 有get方法或者is方法
                      Method getMethod = ReflectionUtils.findMethod(sourceClass, "get" + methodNameSuffix);
                      if (getMethod == null && (targetFieldClass == boolean.class || targetFieldClass == Boolean.class)) {
                          getMethod = ReflectionUtils.findMethod(sourceClass, "is" + methodNameSuffix);
                      }
                      if (getMethod == null) {
                          continue;
                      }
                      // 查看返回值是否相同,不完全相同是否可以转换
                      if (getMethod.getReturnType() == targetFieldClass) {
                          if (!deepCopy) {
                              methodCode.append("target.").append(setMethod.getName()).append("(").append("source.").append(getMethod.getName()).append("()").append(");\n");
                          } else {
                              if (ClassHelper.isPrimitiveType(targetFieldClass) || ClassHelper.isPrimitiveWrapperType(targetFieldClass)
                                      || targetFieldClass == String.class) {
                                  methodCode.append("target.").append(setMethod.getName()).append("(").append("source.").append(getMethod.getName()).append("()").append(");\n");
                              } else {
                                  // 深度复制,对于非基本类型的采用流的方式拷贝
                                  methodCode.append("target.").append(setMethod.getName()).append("(")
                                          .append("(").append(targetFieldClass.getName()).append(")")
                                          .append(BeanUtils.class.getName()).append(".deepClone(")
                                          .append("source.").append(getMethod.getName()).append("()")
                                          .append(")")
                                          .append(");\n");
                              }
                          }
                      } else if (ClassHelper.isPrimitiveType(targetFieldClass) && ClassHelper.getPrimitiveTypeByWrapper(getMethod.getReturnType()) == targetFieldClass) {
                          // 类似 target.setInt(source.getInt() == null ? 0 : source.getInt());
                          methodCode.append("target.").append(setMethod.getName()).append("(");
                          methodCode.append("source.").append(getMethod.getName()).append("() == null ? ").append(String.valueOf(ClassHelper.getPrimitiveDftValue(targetFieldClass))).append(" : ").append("source.").append(getMethod.getName()).append("()");
                          methodCode.append(");\n");
                      } else if (ClassHelper.isPrimitiveWrapperType(targetFieldClass) && ClassHelper.getWrapperTypeByPrimitive(getMethod.getReturnType()) == targetFieldClass) {
                          methodCode.append("target.").append(setMethod.getName()).append("(").append("source.").append(getMethod.getName()).append("()").append(");\n");
                      }
                  }
              }
          }
  
          methodCode.append("}");
          return methodCode.toString();
      }