docs: @SuppressWarnings("unchecked")
      public <T> T get(T defaultValue, Class<T> beanType, Consumer<T> changeListener,
                       CentralDogmaBeanConfig overrides, long initialValueTimeout,
                       TimeUnit initialValueTimeoutUnit)
              throws TimeoutException, InterruptedException {
          requireNonNull(defaultValue, "defaultValue");
          requireNonNull(beanType, "beanType");
          requireNonNull(overrides, "overrides");
          requireNonNull(initialValueTimeoutUnit, "initialValueTimeoutUnit");
  
          final CentralDogmaBean centralDogmaBean = beanType.getAnnotation(CentralDogmaBean.class);
          if (centralDogmaBean == null) {
              throw new IllegalArgumentException("missing CentralDogmaBean annotation");
          }
  
          final CentralDogmaBeanConfig settings = merge(convertToSettings(centralDogmaBean), overrides);
          checkState(!isNullOrEmpty(settings.project().get()), "settings.projectName should non-null");
          checkState(!isNullOrEmpty(settings.repository().get()), "settings.repositoryName should non-null");
          checkState(!isNullOrEmpty(settings.path().get()), "settings.fileName should non-null");
  
          final Watcher<T> watcher = dogma.fileWatcher(
                  settings.project().get(),
                  settings.repository().get(),
                  buildQuery(settings),
                  jsonNode -> {
                      try {
                          final T value = objectMapper.treeToValue(jsonNode, beanType);
                          changeListener.accept(value);
                          return value;
                      } catch (JsonProcessingException e) {
                          throw new IllegalStateException(
                                  "Failed to convert a JSON node into: " + beanType.getName(), e);
                      }
                  });
  
          if (initialValueTimeout > 0) {
              final long t0 = System.nanoTime();
              final Latest<T> latest = watcher.awaitInitialValue(initialValueTimeout, initialValueTimeoutUnit);
              final long elapsedMillis = System.nanoTime() - t0;
              logger.debug("Initial value of {} obtained in {} ms: rev={}",
                           settings, elapsedMillis, latest.revision());
          }
  
          final ProxyFactory factory = new ProxyFactory();
          factory.setSuperclass(beanType);
          factory.setFilter(method -> {
              // Allow all non-parameter methods (getter/closeWatcher..)
              if (method.getParameterCount() == 0) {
                  return true;
              }
              // Allow methods have bidirectional property and looks like setter
              return centralDogmaBean.bidirectional() && method.getParameterCount() == 1;
          });
  
          try {
              return (T) factory.create(EMPTY_TYPES, EMPTY_ARGS,
                                        new CentralDogmaBeanMethodHandler<>(watcher, defaultValue));
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }