code: public <T> void dereference(T instance, Class<T> type, Annotation qualifier,
                                  Class<? extends Annotation> injectAnnotation) throws ProviderMissingException {
          doRelease(instance, null, type, qualifier, injectAnnotation);
  
          Provider<T> provider = findProvider(type, qualifier);
          provider.release();
          dereferenceProvider(provider, instance);
      }
docs: Dereference an injectable object. When it's not referenced by anything else after this
  dereferencing, release its cached instance if possible.
  
  @param instance         the instance is to dereference
  @param type             the type of the object
  @param qualifier        the qualifier
  @param injectAnnotation the inject annotation