@Override public <T>Provider<T> provider(Key<T> key){
  Objects.requireNonNull(key);
  Provider<T> provider=(Provider)_providerMap.get(key);
  if (provider == null) {
    provider=lookupProvider(key);
    if (provider == null) {
      provider=autoProvider(key);
    }
    _providerMap.putIfAbsent(key,provider);
    provider=(Provider)_providerMap.get(key);
  }
  return provider;
}

@ Override public < T > Provider < T > provider ( Key < T > key ) { Objects . requireNonNull ( key ) ; Provider < T > provider = ( Provider ) _providerMap . get ( key ) ; if ( provider == null ) { provider = lookupProvider ( key ) ; if ( provider == null ) { provider = autoProvider ( key ) ; } _providerMap . putIfAbsent ( key , provider ) ; provider = ( Provider ) _providerMap . get ( key ) ; } return provider ; }
returns a bean instance provider for a key .
