public class Injector extends Object
Dependencies may be retrieved explicitly by calling
dependencies will be automatically injected as needed. For a given injector, all calls to
getInstance(java.lang.Class<T>) are idempotent.
Dependencies are identified by an interface or class, and optionally by a name specified with
Dependency ResolutionWhen a dependency is requested, an implementation is sought.
The injector looks for any instance that has been previously found for the given interface, or
that has been explicitly registered with
Injector.Builder.bind(Class, Object) or
Injector.Builder.bind(Key, Object). If none is found, the injector searches for an implementing class
from the following sources, in order:
- Explicitly-registered implementations registered with
- If the dependency type is an array or
Collection, then its component type is recursively sought using
PluginFinder.findPlugins(Class)and an array or collection of those instances is returned.
- Plugin implementations published as
ServiceLoaderservices under the dependency type (see also
- Fallback default implementation classes registered with
- If the dependency type is a concrete class, then the dependency type itself.
AutoFactory; see Scopes below).
If no implementing class is found in the injector or any superinjector, an exception is thrown.
InjectionWhen the injector has determined an implementing class, it attempts to instantiate it. It searches for a constructor in the following order:
- A singular public constructor annotated @
Inject. (If multiple constructors are @
Injectannotated, the injector will throw an exception.)
- A singular public constructor of any arity.
- If no constructor has yet been found, the injector will throw an exception.
ScopesIf the dependency type is an interface annotated @
AutoFactory, then a factory object implementing that interface is created; a new scoped injector is created for every method call to the factory, with parameter arguments registered on the scoped injector.
Thread SafetyAll methods are MT-safe.
Nested Class Summary
Constructors Constructor Description
Injector()Creates a new empty injector.