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 Classes Modifier and Type Class Description private static classProviderMethod.ReflectionProviderMethod<T>AProviderMethodimplementation that invokes the method using normal java reflection.
-
Field Summary
Fields Modifier and Type Field Description private java.lang.annotation.Annotationannotationprivate com.google.common.collect.ImmutableSet<Dependency<?>>dependenciesprivate booleanexposedprotected java.lang.Objectinstanceprivate Key<T>keyprotected java.lang.reflect.Methodmethodprivate SingleParameterInjector<?>[]parameterInjectorsSet byinitialize(InjectorImpl, Errors)so it is always available prior to injection.private java.lang.Class<? extends java.lang.annotation.Annotation>scopeAnnotation-
Fields inherited from class com.google.inject.internal.InternalProviderInstanceBindingImpl.Factory
provisionCallback
-
-
Constructor Summary
Constructors Modifier Constructor Description privateProviderMethod(Key<T> key, java.lang.reflect.Method method, java.lang.Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, java.lang.Class<? extends java.lang.annotation.Annotation> scopeAnnotation, java.lang.annotation.Annotation annotation)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description <B,V>
VacceptExtensionVisitor(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.voidconfigure(Binder binder)(package private) static <T> ProviderMethod<T>create(Key<T> key, java.lang.reflect.Method method, java.lang.Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, java.lang.Class<? extends java.lang.annotation.Annotation> scopeAnnotation, boolean skipFastClassGeneration, java.lang.annotation.Annotation annotation)Creates aProviderMethod.protected TdoProvision(InternalContext context, Dependency<?> dependency)Creates an object to be injected.(package private) abstract TdoProvision(java.lang.Object[] parameters)Extension point for our subclasses to implement the provisioning strategy.booleanequals(java.lang.Object obj)java.lang.annotation.AnnotationgetAnnotation()Returns the annotation that caused this binding to be created.java.util.Set<Dependency<?>>getDependencies()Returns the known dependencies for this type.java.lang.ObjectgetEnclosingInstance()Returns the instance of the object the method is defined in.java.lang.ObjectgetInstance()Key<T>getKey()Returns the key of the binding.java.lang.reflect.MethodgetMethod()Returns the method this binding uses.inthashCode()(package private) voidinitialize(InjectorImpl injector, Errors errors)A callback that allows for implementations to fetch dependencies on other bindings.java.lang.StringtoString()-
Methods inherited from class com.google.inject.internal.InternalProviderInstanceBindingImpl.CyclicFactory
get
-
Methods inherited from class com.google.inject.internal.InternalProviderInstanceBindingImpl.Factory
get, getSource
-
-
-
-
Field Detail
-
instance
protected final java.lang.Object instance
-
method
protected final java.lang.reflect.Method method
-
scopeAnnotation
private final java.lang.Class<? extends java.lang.annotation.Annotation> scopeAnnotation
-
dependencies
private final com.google.common.collect.ImmutableSet<Dependency<?>> dependencies
-
exposed
private final boolean exposed
-
annotation
private final java.lang.annotation.Annotation annotation
-
parameterInjectors
private SingleParameterInjector<?>[] parameterInjectors
Set byinitialize(InjectorImpl, Errors)so it is always available prior to injection.
-
-
Constructor Detail
-
ProviderMethod
private ProviderMethod(Key<T> key, java.lang.reflect.Method method, java.lang.Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, java.lang.Class<? extends java.lang.annotation.Annotation> scopeAnnotation, java.lang.annotation.Annotation annotation)
- Parameters:
method- the method to invoke. It's return type must be the same type askey.
-
-
Method Detail
-
create
static <T> ProviderMethod<T> create(Key<T> key, java.lang.reflect.Method method, java.lang.Object instance, com.google.common.collect.ImmutableSet<Dependency<?>> dependencies, java.lang.Class<? extends java.lang.annotation.Annotation> scopeAnnotation, boolean skipFastClassGeneration, java.lang.annotation.Annotation annotation)
Creates aProviderMethod.Unless
skipFastClassGenerationis set, this will usenet.sf.cglib.reflect.FastClassto invoke the actual method, since it is significantly faster. However, this will fail if the method isprivateorprotected, since fastclass is subject to java access policies.
-
getKey
public Key<T> getKey()
Description copied from interface:ProvidesMethodBindingReturns the key of the binding.- Specified by:
getKeyin interfaceProvidesMethodBinding<T>
-
getMethod
public java.lang.reflect.Method getMethod()
Description copied from interface:ProvidesMethodBindingReturns the method this binding uses.- Specified by:
getMethodin interfaceProvidesMethodBinding<T>
-
getInstance
public java.lang.Object getInstance()
-
getEnclosingInstance
public java.lang.Object getEnclosingInstance()
Description copied from interface:ProvidesMethodBindingReturns the instance of the object the method is defined in.- Specified by:
getEnclosingInstancein interfaceProvidesMethodBinding<T>
-
getAnnotation
public java.lang.annotation.Annotation getAnnotation()
Description copied from interface:ProvidesMethodBindingReturns the annotation that caused this binding to be created. For@Providesmethods, this is an instance of the@Providesannotation. For bindings fromModuleAnnotatedMethodScanner, this is the annotation that caused the scanner to produce the binding.- Specified by:
getAnnotationin interfaceProvidesMethodBinding<T>
-
configure
public void configure(Binder binder)
-
initialize
void initialize(InjectorImpl injector, Errors errors) throws ErrorsException
Description copied from class:InternalProviderInstanceBindingImpl.FactoryA 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:
initializein classInternalProviderInstanceBindingImpl.Factory<T>- Throws:
ErrorsException
-
doProvision
protected T doProvision(InternalContext context, Dependency<?> dependency) throws InternalProvisionException
Description copied from class:InternalProviderInstanceBindingImpl.FactoryCreates an object to be injected.- Specified by:
doProvisionin classInternalProviderInstanceBindingImpl.Factory<T>- Returns:
- instance to be injected
- Throws:
InternalProvisionException- if a value cannot be provided
-
doProvision
abstract T doProvision(java.lang.Object[] parameters) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
Extension point for our subclasses to implement the provisioning strategy.- Throws:
java.lang.IllegalAccessExceptionjava.lang.reflect.InvocationTargetException
-
getDependencies
public java.util.Set<Dependency<?>> getDependencies()
Description copied from interface:HasDependenciesReturns the known dependencies for this type. If this has dependencies whose values are not known statically, a dependency for theInjectorwill be included in the returned set.- Specified by:
getDependenciesin interfaceHasDependencies- Returns:
- a possibly empty set
-
acceptExtensionVisitor
public <B,V> V acceptExtensionVisitor(BindingTargetVisitor<B,V> visitor, ProviderInstanceBinding<? extends B> binding)
Description copied from interface:ProviderWithExtensionVisitorInstructs 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:
acceptExtensionVisitorin interfaceProviderWithExtensionVisitor<T>
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equalsin classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
-