Package com.google.inject.internal
Class ProviderMethod<T>
java.lang.Object
com.google.inject.internal.InternalProviderInstanceBindingImpl.Factory<T>
com.google.inject.internal.InternalProviderInstanceBindingImpl.CyclicFactory<T>
com.google.inject.internal.ProviderMethod<T>
- All Implemented Interfaces:
InternalFactory<T>
,Provider<T>
,HasDependencies
,ProviderWithExtensionVisitor<T>
,ProvidesMethodBinding<T>
,javax.inject.Provider<T>
- Direct Known Subclasses:
ProviderMethod.ReflectionProviderMethod
public abstract class ProviderMethod<T>
extends InternalProviderInstanceBindingImpl.CyclicFactory<T>
implements HasDependencies, ProvidesMethodBinding<T>, ProviderWithExtensionVisitor<T>
A provider that invokes a method and returns its result.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class
AProviderMethod
implementation that invokes the method using normal java reflection. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Annotation
private final com.google.common.collect.ImmutableSet<Dependency<?>>
private final boolean
protected final Object
protected final Method
private SingleParameterInjector<?>[]
Set byinitialize(InjectorImpl, Errors)
so it is always available prior to injection.private final Class<? extends Annotation>
Fields inherited from class com.google.inject.internal.InternalProviderInstanceBindingImpl.Factory
provisionCallback
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprivate
ProviderMethod
(Key<T> key, Method method, Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, Class<? extends Annotation> scopeAnnotation, Annotation annotation) -
Method Summary
Modifier and TypeMethodDescription<B,
V> V acceptExtensionVisitor
(BindingTargetVisitor<B, V> visitor, ProviderInstanceBinding<? extends B> binding) Instructs the extension determine if the visitor is an instance of a custom extension visitor, and if so, visit it using that method.void
(package private) static <T> ProviderMethod<T>
create
(Key<T> key, Method method, Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, Class<? extends Annotation> scopeAnnotation, boolean skipFastClassGeneration, Annotation annotation) Creates aProviderMethod
.protected T
doProvision
(InternalContext context, Dependency<?> dependency) Creates an object to be injected.(package private) abstract T
doProvision
(Object[] parameters) Extension point for our subclasses to implement the provisioning strategy.boolean
Returns the annotation that caused this binding to be created.Set<Dependency<?>>
Returns the known dependencies for this type.Returns the instance of the object the method is defined in.getKey()
Returns the key of the binding.Returns the method this binding uses.int
hashCode()
(package private) void
initialize
(InjectorImpl injector, Errors errors) A callback that allows for implementations to fetch dependencies on other bindings.toString()
Methods inherited from class com.google.inject.internal.InternalProviderInstanceBindingImpl.CyclicFactory
get
Methods inherited from class com.google.inject.internal.InternalProviderInstanceBindingImpl.Factory
get, getSource
-
Field Details
-
instance
-
method
-
key
-
scopeAnnotation
-
dependencies
-
exposed
private final boolean exposed -
annotation
-
parameterInjectors
Set byinitialize(InjectorImpl, Errors)
so it is always available prior to injection.
-
-
Constructor Details
-
ProviderMethod
private ProviderMethod(Key<T> key, Method method, Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, Class<? extends Annotation> scopeAnnotation, Annotation annotation) - Parameters:
method
- the method to invoke. It's return type must be the same type askey
.
-
-
Method Details
-
create
static <T> ProviderMethod<T> create(Key<T> key, Method method, Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, Class<? extends Annotation> scopeAnnotation, boolean skipFastClassGeneration, Annotation annotation) Creates aProviderMethod
.Unless
skipFastClassGeneration
is set, this will usenet.sf.cglib.reflect.FastClass
to invoke the actual method, since it is significantly faster. However, this will fail if the method isprivate
orprotected
, since fastclass is subject to java access policies. -
getKey
Description copied from interface:ProvidesMethodBinding
Returns the key of the binding.- Specified by:
getKey
in interfaceProvidesMethodBinding<T>
-
getMethod
Description copied from interface:ProvidesMethodBinding
Returns the method this binding uses.- Specified by:
getMethod
in interfaceProvidesMethodBinding<T>
-
getInstance
-
getEnclosingInstance
Description copied from interface:ProvidesMethodBinding
Returns the instance of the object the method is defined in.- Specified by:
getEnclosingInstance
in interfaceProvidesMethodBinding<T>
-
getAnnotation
Description copied from interface:ProvidesMethodBinding
Returns the annotation that caused this binding to be created. For@Provides
methods, this is an instance of the@Provides
annotation. For bindings fromModuleAnnotatedMethodScanner
, this is the annotation that caused the scanner to produce the binding.- Specified by:
getAnnotation
in interfaceProvidesMethodBinding<T>
-
configure
-
initialize
Description copied from class:InternalProviderInstanceBindingImpl.Factory
A callback that allows for implementations to fetch dependencies on other bindings.Will be called exactly once, prior to any call to
InternalProviderInstanceBindingImpl.Factory.doProvision(com.google.inject.internal.InternalContext, com.google.inject.spi.Dependency<?>)
.- Specified by:
initialize
in classInternalProviderInstanceBindingImpl.Factory<T>
- Throws:
ErrorsException
-
doProvision
protected T doProvision(InternalContext context, Dependency<?> dependency) throws InternalProvisionException Description copied from class:InternalProviderInstanceBindingImpl.Factory
Creates an object to be injected.- Specified by:
doProvision
in classInternalProviderInstanceBindingImpl.Factory<T>
- Returns:
- instance to be injected
- Throws:
InternalProvisionException
- if a value cannot be provided
-
doProvision
abstract T doProvision(Object[] parameters) throws IllegalAccessException, InvocationTargetException Extension point for our subclasses to implement the provisioning strategy. -
getDependencies
Description copied from interface:HasDependencies
Returns the known dependencies for this type. If this has dependencies whose values are not known statically, a dependency for theInjector
will be included in the returned set.- Specified by:
getDependencies
in interfaceHasDependencies
- Returns:
- a possibly empty set
-
acceptExtensionVisitor
public <B,V> V acceptExtensionVisitor(BindingTargetVisitor<B, V> visitor, ProviderInstanceBinding<? extends B> binding) Description copied from interface:ProviderWithExtensionVisitor
Instructs the extension determine if the visitor is an instance of a custom extension visitor, and if so, visit it using that method. If the visitor is not an instance of the custom extension visitor, this method MUST call visitor.visit(binding).Due to issues with generics, the type parameters of this method do not relate to the type of the provider. In practice, the 'B' type will always be a supertype of 'T'.
- Specified by:
acceptExtensionVisitor
in interfaceProviderWithExtensionVisitor<T>
-
toString
-
equals
-
hashCode
public int hashCode()
-