docs: public static Object newInstance(Class clazz, ArgumentResolver resolver){
          Validate.argumentIsNotNull(clazz);
          for (Constructor constructor : clazz.getDeclaredConstructors()) {
              if (isPrivate(constructor) || isProtected(constructor)) {
                  continue;
              }
  
              Class [] types = constructor.getParameterTypes();
              Object[] params = new Object[types.length];
              for (int i=0; i<types.length; i++){
                  try {
                      params[i] = resolver.resolve(types[i]);
                  } catch (JaversException e){
                      logger.error("failed to create new instance of "+clazz.getName()+", argument resolver for arg["+i+"] " +
                                   types[i].getName() + " thrown exception: "+e.getMessage());
                      throw e;
                  }
              }
              try {
                  constructor.setAccessible(true);
                  return constructor.newInstance(params);
              } catch (Exception e) {
                  throw new RuntimeException(e);
              }
          }
          throw new JaversException(JaversExceptionCode.NO_PUBLIC_CONSTRUCTOR,clazz.getName());
      }