An object capable of providing instances of type
T. Providers are used in numerous ways by Guice:
- When the default means for obtaining instances (an injectable or parameterless constructor) is insufficient for a particular binding, the module can specify a custom
Provider instead, to control exactly how Guice creates or obtains instances for the binding.
- An implementation class may always choose to have a
Provider<T> instance injected, rather than having a T injected directly. This may give you access to multiple instances, instances you wish to safely mutate and discard, instances which are out of scope (e.g. using a @RequestScoped object from within a @SessionScoped object), or instances that will be initialized lazily.
- A custom
Scope is implemented as a decorator of Provider<T>, which decides when to delegate to the backing provider and when to provide the instance some other way.
- The
Injector offers access to the Provider<T> it uses to fulfill requests for a given key, via the Injector.getProvider(com.google.inject.Key<T>) methods.