@Override
    public synchronized @NotNull Binding getRootBinding(@NotNull Class<?> aClass, @NotNull Type originalType) {
      Map<Type, Binding> map = getBindingCacheMap();
      Binding binding = map.get(originalType);
      if (binding == null) {
        binding = createClassBinding(aClass, null, originalType, this);
        if (binding == null) {
          binding = new BeanBinding(aClass);
        }

        map.put(originalType, binding);
        try {
          binding.init(originalType, this);
        }
        catch (RuntimeException | Error e) {
          map.remove(originalType);
          throw e;
        }
      }
      return binding;
    }
@Override
    public synchronized @NotNull Binding getRootBinding(@NotNull Class<?> aClass, @NotNull Type originalType)