Package org.picocontainer.injectors
Class MethodInjector<T>
- java.lang.Object
-
- org.picocontainer.adapters.AbstractAdapter<T>
-
- org.picocontainer.injectors.AbstractInjector<T>
-
- org.picocontainer.injectors.SingleMemberInjector<T>
-
- org.picocontainer.injectors.MethodInjector<T>
-
- All Implemented Interfaces:
Serializable
,ComponentAdapter<T>
,ComponentMonitorStrategy
,Injector<T>
- Direct Known Subclasses:
MethodInjector.ByMethodName
,MethodInjector.ByReflectionMethod
public abstract class MethodInjector<T> extends SingleMemberInjector<T>
Injection will happen through a single method for the component. Most likely it is a method called 'inject', though that can be overridden.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MethodInjector.ByMethodName
static class
MethodInjector.ByReflectionMethod
-
Nested classes/interfaces inherited from class org.picocontainer.injectors.SingleMemberInjector
SingleMemberInjector.ParameterCannotBeNullException
-
Nested classes/interfaces inherited from class org.picocontainer.injectors.AbstractInjector
AbstractInjector.AmbiguousComponentResolutionException, AbstractInjector.CyclicDependencyException, AbstractInjector.NotConcreteRegistrationException, AbstractInjector.UnsatisfiableDependenciesException
-
Nested classes/interfaces inherited from interface org.picocontainer.ComponentAdapter
ComponentAdapter.NOTHING
-
-
Field Summary
-
Fields inherited from class org.picocontainer.injectors.AbstractInjector
parameters, verifyingGuard
-
-
Constructor Summary
Constructors Constructor Description MethodInjector(Object componentKey, Class componentImplementation, Parameter[] parameters, ComponentMonitor monitor, String methodName, boolean useNames)
Creates a MethodInjector
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description Object
decorateComponentInstance(PicoContainer container, Type into, T instance)
A preexiting component instance can be injected into after instantiationT
getComponentInstance(PicoContainer container, Type into)
Retrieve the component instance.protected abstract Method
getInjectorMethod()
protected Object[]
getMemberArguments(PicoContainer container, Method method)
protected boolean
isNullParamAllowed(AccessibleObject member, int i)
Checks to see if a null parameter is allowed in the given constructor/field/method.void
verify(PicoContainer container)
Verify that all dependencies for this adapter can be satisfied.-
Methods inherited from class org.picocontainer.injectors.SingleMemberInjector
boxParameters, getBindings, getMemberArguments, getParameter, getParanamer, nullCheck
-
Methods inherited from class org.picocontainer.injectors.AbstractInjector
accept, box, caughtIllegalAccessException, caughtIllegalAccessException, caughtInstantiationException, caughtInvocationTargetException, createDefaultParameters, getComponentInstance, getDescriptor, newInstance, useNames
-
Methods inherited from class org.picocontainer.adapters.AbstractAdapter
changeMonitor, checkTypeCompatibility, currentMonitor, findAdapterOfType, getComponentImplementation, getComponentKey, getDelegate, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.picocontainer.ComponentAdapter
findAdapterOfType, getComponentImplementation, getComponentKey, getDelegate
-
-
-
-
Constructor Detail
-
MethodInjector
public MethodInjector(Object componentKey, Class componentImplementation, Parameter[] parameters, ComponentMonitor monitor, String methodName, boolean useNames) throws AbstractInjector.NotConcreteRegistrationException
Creates a MethodInjector- Parameters:
componentKey
- the search key for this implementationcomponentImplementation
- the concrete implementationparameters
- the parameters to use for the initializationmonitor
- the component monitor used by this addAdaptermethodName
- the method nameuseNames
- use argument names when looking up dependencies- Throws:
AbstractInjector.NotConcreteRegistrationException
- if the implementation is not a concrete class.NullPointerException
- if one of the parameters isnull
-
-
Method Detail
-
getInjectorMethod
protected abstract Method getInjectorMethod()
-
getComponentInstance
public T getComponentInstance(PicoContainer container, Type into) throws PicoCompositionException
Description copied from interface:ComponentAdapter
Retrieve the component instance. This method will usually create a new instance each time it is called, but that is not required. For example,Cached
will always return the same instance.- Specified by:
getComponentInstance
in interfaceComponentAdapter<T>
- Specified by:
getComponentInstance
in classAbstractInjector<T>
- Parameters:
container
- thePicoContainer
, that is used to resolve any possible dependencies of the instance.into
- the class that is about to be injected into. Use ComponentAdapter.NOTHING.class if this is not important to you.- Returns:
- the component instance.
- Throws:
PicoCompositionException
- if the component has dependencies which could not be resolved, or instantiation of the component lead to an ambiguous situation within the container.
-
getMemberArguments
protected Object[] getMemberArguments(PicoContainer container, Method method)
-
decorateComponentInstance
public Object decorateComponentInstance(PicoContainer container, Type into, T instance)
Description copied from interface:Injector
A preexiting component instance can be injected into after instantiation- Specified by:
decorateComponentInstance
in interfaceInjector<T>
- Overrides:
decorateComponentInstance
in classAbstractInjector<T>
- Parameters:
container
- the container that can provide injectable dependenciesinstance
- the instance to- Returns:
-
verify
public void verify(PicoContainer container) throws PicoCompositionException
Description copied from interface:ComponentAdapter
Verify that all dependencies for this adapter can be satisfied. Normally, the adapter should verify this by checking that the associated PicoContainer contains all the needed dependencies.- Specified by:
verify
in interfaceComponentAdapter<T>
- Overrides:
verify
in classAbstractInjector<T>
- Parameters:
container
- thePicoContainer
, that is used to resolve any possible dependencies of the instance.- Throws:
PicoCompositionException
- if one or more dependencies cannot be resolved.
-
isNullParamAllowed
protected boolean isNullParamAllowed(AccessibleObject member, int i)
Description copied from class:SingleMemberInjector
Checks to see if a null parameter is allowed in the given constructor/field/method. The default version allows null if the target object is not a primitive type.- Overrides:
isNullParamAllowed
in classSingleMemberInjector<T>
- Parameters:
member
- constructor method or fieldi
- parameter #.- Returns:
- true if the null parameter might be allowed.
-
-