Package com.google.inject.internal
Class Initializer
- java.lang.Object
-
- com.google.inject.internal.Initializer
-
final class Initializer extends java.lang.Object
Manages and injects instances at injector-creation time. This is made more complicated by instances that request other instances while they're being injected. We overcome this by usingInitializable
, which attempts to perform injection before use.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
Initializer.InjectableReference<T>
private static class
Initializer.InjectableReferenceState
-
Field Summary
Fields Modifier and Type Field Description private CycleDetectingLock.CycleDetectingLockFactory<java.lang.Class<?>>
cycleDetectingLockFactory
Allows us to detect circular dependencies.private java.util.IdentityHashMap<java.lang.Object,Initializer.InjectableReference<?>>
initializablesCache
Map that guarantees that no instance would get two references.private java.util.List<Initializer.InjectableReference<?>>
pendingInjections
Instances that need injection during injector creation to a source that registered them.private boolean
validationStarted
Is set to true oncevalidateOustandingInjections(com.google.inject.internal.Errors)
is called.
-
Constructor Summary
Constructors Constructor Description Initializer()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
injectAll(Errors errors)
Performs creation-time injections on all objects that require it.(package private) <T> Initializable<T>
requestInjection(InjectorImpl injector, T instance, Binding<T> binding, java.lang.Object source, java.util.Set<InjectionPoint> injectionPoints)
Registers an instance for member injection when that step is performed.(package private) void
validateOustandingInjections(Errors errors)
Prepares member injectors for all injected instances.
-
-
-
Field Detail
-
validationStarted
private volatile boolean validationStarted
Is set to true oncevalidateOustandingInjections(com.google.inject.internal.Errors)
is called.
-
cycleDetectingLockFactory
private final CycleDetectingLock.CycleDetectingLockFactory<java.lang.Class<?>> cycleDetectingLockFactory
Allows us to detect circular dependencies. It's only used during injectable reference initialization. After initialization direct access through volatile field is used.
-
pendingInjections
private final java.util.List<Initializer.InjectableReference<?>> pendingInjections
Instances that need injection during injector creation to a source that registered them. New references added beforevalidateOustandingInjections(com.google.inject.internal.Errors)
. Cleared up ininjectAll(com.google.inject.internal.Errors)
.
-
initializablesCache
private final java.util.IdentityHashMap<java.lang.Object,Initializer.InjectableReference<?>> initializablesCache
Map that guarantees that no instance would get two references. New references added beforevalidateOustandingInjections(com.google.inject.internal.Errors)
. Cleared up invalidateOustandingInjections(com.google.inject.internal.Errors)
.
-
-
Method Detail
-
requestInjection
<T> Initializable<T> requestInjection(InjectorImpl injector, T instance, Binding<T> binding, java.lang.Object source, java.util.Set<InjectionPoint> injectionPoints)
Registers an instance for member injection when that step is performed.- Parameters:
instance
- an instance that optionally has members to be injected (each annotated with @Inject).binding
- the binding that caused this initializable to be created, if it exists.source
- the source location that this injection was requested
-
validateOustandingInjections
void validateOustandingInjections(Errors errors)
Prepares member injectors for all injected instances. This prompts Guice to do static analysis on the injected instances.
-
injectAll
void injectAll(Errors errors)
Performs creation-time injections on all objects that require it. Whenever fulfilling an injection depends on another object that requires injection, we inject it first. If the two instances are codependent (directly or transitively), ordering of injection is arbitrary.
-
-