org.picocontainer.injectors
Class MethodInjector<T>

java.lang.Object
  extended by org.picocontainer.adapters.AbstractAdapter<T>
      extended by org.picocontainer.injectors.AbstractInjector<T>
          extended by org.picocontainer.injectors.SingleMemberInjector<T>
              extended by org.picocontainer.injectors.MethodInjector<T>
All Implemented Interfaces:
Serializable, ComponentAdapter<T>, ComponentMonitorStrategy, Injector<T>
Direct Known Subclasses:
MethodInjector.ByReflectionMethod

public 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.

Author:
Paul Hammant, Aslak Hellesøy, Jon Tirsén, Zohar Melamed, Jörg Schaible, Mauro Talevi
See Also:
Serialized Form

Nested Class Summary
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
MethodInjector(Object componentKey, Class componentImplementation, Parameter[] parameters, ComponentMonitor monitor, String methodName, boolean useNames)
          Creates a MethodInjector
 
Method Summary
 Object decorateComponentInstance(PicoContainer container, Type into, T instance)
          A preexiting component instance can be injected into after instantiation
 T getComponentInstance(PicoContainer container, Type into)
          Retrieve the component instance.
 String getDescriptor()
          Get a string key descriptor of the component adapter for use in toString()
protected  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, 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 implementation
componentImplementation - the concrete implementation
parameters - the parameters to use for the initialization
monitor - the component monitor used by this addAdapter
methodName - the method name
useNames - use argument names when looking up dependencies
Throws:
AbstractInjector.NotConcreteRegistrationException - if the implementation is not a concrete class.
NullPointerException - if one of the parameters is null
Method Detail

getInjectorMethod

protected 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 interface ComponentAdapter<T>
Specified by:
getComponentInstance in class AbstractInjector<T>
Parameters:
container - the PicoContainer, 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 interface Injector<T>
Overrides:
decorateComponentInstance in class AbstractInjector<T>
Parameters:
container - the container that can provide injectable dependencies
instance - 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 interface ComponentAdapter<T>
Overrides:
verify in class AbstractInjector<T>
Parameters:
container - the PicoContainer, that is used to resolve any possible dependencies of the instance.
Throws:
PicoCompositionException - if one or more dependencies cannot be resolved.

getDescriptor

public String getDescriptor()
Description copied from interface: ComponentAdapter
Get a string key descriptor of the component adapter for use in toString()

Specified by:
getDescriptor in interface ComponentAdapter<T>
Overrides:
getDescriptor in class AbstractInjector<T>
Returns:
the descriptor

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 class SingleMemberInjector<T>
Parameters:
member - constructor method or field
i - parameter #.
Returns:
true if the null parameter might be allowed.


Copyright © 2003-2010 Codehaus. All Rights Reserved.