Package org.picocontainer.injectors
Class AbstractInjector<T>
java.lang.Object
org.picocontainer.adapters.AbstractAdapter<T>
org.picocontainer.injectors.AbstractInjector<T>
- All Implemented Interfaces:
Serializable,ComponentAdapter<T>,ComponentMonitorStrategy,Injector<T>
- Direct Known Subclasses:
CompositeInjector,IterativeInjector,SingleMemberInjector
This ComponentAdapter will instantiate a new object for each call to
ComponentAdapter.getComponentInstance(PicoContainer, Type).
That means that when used with a PicoContainer, getComponent will
return a new object each time.- Author:
- Aslak Hellesøy, Paul Hammant, Jörg Schaible, Mauro Talevi
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classException that is thrown as part of the introspection.static classstatic classstatic classException thrown when some of the component's dependencies are not satisfiable.Nested classes/interfaces inherited from interface org.picocontainer.ComponentAdapter
ComponentAdapter.NOTHING -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Parameter[]The parameters to use for initialization.protected org.picocontainer.injectors.AbstractInjector.ThreadLocalCyclicDependencyGuardThe cycle guard for the verification. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractInjector(Object componentKey, Class<?> componentImplementation, Parameter[] parameters, ComponentMonitor monitor, boolean useNames) Constructs a new ComponentAdapter for the given key and implementation. -
Method Summary
Modifier and TypeMethodDescriptionvoidaccept(PicoVisitor visitor) Accepts a visitor for this ComponentAdapter.protected Typeprotected TcaughtIllegalAccessException(ComponentMonitor componentMonitor, Constructor<T> constructor, IllegalAccessException e, PicoContainer container) inform monitor about access exception.protected ObjectcaughtIllegalAccessException(ComponentMonitor componentMonitor, Member member, Object componentInstance, IllegalAccessException e) protected TcaughtInstantiationException(ComponentMonitor componentMonitor, Constructor<T> constructor, InstantiationException e, PicoContainer container) inform monitor about component instantiation failureprotected TcaughtInvocationTargetException(ComponentMonitor componentMonitor, Member member, Object componentInstance, InvocationTargetException e) inform monitor about exception while instantiating componentprotected Parameter[]createDefaultParameters(int length) Create default parameters for the given types.decorateComponentInstance(PicoContainer container, Type into, T instance) A preexiting component instance can be injected into after instantiationgetComponentInstance(PicoContainer container) Retrieve the component instance.abstract TgetComponentInstance(PicoContainer container, Type into) Retrieve the component instance.Get a string key descriptor of the component adapter for use in toString()protected TnewInstance(Constructor<T> constructor, Object[] parameters) Instantiate an object with given parameters and respect the accessible flag.booleanuseNames()voidverify(PicoContainer container) Verify that all dependencies for this adapter can be satisfied.Methods inherited from class org.picocontainer.adapters.AbstractAdapter
changeMonitor, checkTypeCompatibility, currentMonitor, findAdapterOfType, getComponentImplementation, getComponentKey, getDelegate, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.picocontainer.ComponentAdapter
findAdapterOfType, getComponentImplementation, getComponentKey, getDelegate
-
Field Details
-
verifyingGuard
protected transient org.picocontainer.injectors.AbstractInjector.ThreadLocalCyclicDependencyGuard verifyingGuardThe cycle guard for the verification. -
parameters
The parameters to use for initialization.
-
-
Constructor Details
-
AbstractInjector
protected AbstractInjector(Object componentKey, Class<?> componentImplementation, Parameter[] parameters, ComponentMonitor monitor, boolean useNames) Constructs a new ComponentAdapter for the given key and implementation.- Parameters:
componentKey- the search key for this implementationcomponentImplementation- the concrete implementationparameters- the parameters to use for the initializationmonitor- the component monitor used by this ComponentAdapter- Throws:
AbstractInjector.NotConcreteRegistrationException- if the implementation is not a concrete classNullPointerException- if one of the parameters isnull
-
-
Method Details
-
useNames
public boolean useNames() -
createDefaultParameters
Create default parameters for the given types.- Parameters:
length- parameter list length- Returns:
- the array with the default parameters.
-
verify
Description copied from interface:ComponentAdapterVerify 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:
verifyin interfaceComponentAdapter<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.
-
getComponentInstance
Description copied from interface:ComponentAdapterRetrieve the component instance. This method will usually create a new instance each time it is called, but that is not required. For example,Cachedwill always return the same instance.- Specified by:
getComponentInstancein interfaceComponentAdapter<T>- Overrides:
getComponentInstancein classAbstractAdapter<T>- Parameters:
container- thePicoContainer, that is used to resolve any possible dependencies of the instance.- Returns:
- the component instance.
- Throws:
PicoCompositionException- if the component has dependencies which could not be resolved, or instantiation of the component lead to an ambigous situation within the container.
-
getComponentInstance
public abstract T getComponentInstance(PicoContainer container, Type into) throws PicoCompositionException Description copied from interface:ComponentAdapterRetrieve the component instance. This method will usually create a new instance each time it is called, but that is not required. For example,Cachedwill always return the same instance.- Specified by:
getComponentInstancein interfaceComponentAdapter<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.
-
decorateComponentInstance
Description copied from interface:InjectorA preexiting component instance can be injected into after instantiation- Specified by:
decorateComponentInstancein interfaceInjector<T>- Parameters:
container- the container that can provide injectable dependenciesinto-instance- the instance to- Returns:
-
accept
Description copied from interface:ComponentAdapterAccepts a visitor for this ComponentAdapter. The method is normally called by visiting aPicoContainer, that cascades the visitor also down to all its ComponentAdapter instances.- Specified by:
acceptin interfaceComponentAdapter<T>- Overrides:
acceptin classAbstractAdapter<T>- Parameters:
visitor- the visitor.
-
getDescriptor
Description copied from interface:ComponentAdapterGet a string key descriptor of the component adapter for use in toString()- Specified by:
getDescriptorin interfaceComponentAdapter<T>- Returns:
- the descriptor
-
newInstance
protected T newInstance(Constructor<T> constructor, Object[] parameters) throws InstantiationException, IllegalAccessException, InvocationTargetException Instantiate an object with given parameters and respect the accessible flag.- Parameters:
constructor- the constructor to useparameters- the parameters for the constructor- Returns:
- the new object.
- Throws:
InstantiationExceptionIllegalAccessExceptionInvocationTargetException
-
caughtInstantiationException
protected T caughtInstantiationException(ComponentMonitor componentMonitor, Constructor<T> constructor, InstantiationException e, PicoContainer container) inform monitor about component instantiation failure- Parameters:
componentMonitor-constructor-e-container-- Returns:
-
caughtIllegalAccessException
protected T caughtIllegalAccessException(ComponentMonitor componentMonitor, Constructor<T> constructor, IllegalAccessException e, PicoContainer container) inform monitor about access exception.- Parameters:
componentMonitor-constructor-e-container-- Returns:
-
caughtInvocationTargetException
protected T caughtInvocationTargetException(ComponentMonitor componentMonitor, Member member, Object componentInstance, InvocationTargetException e) inform monitor about exception while instantiating component- Parameters:
componentMonitor-member-componentInstance-e-- Returns:
-
caughtIllegalAccessException
protected Object caughtIllegalAccessException(ComponentMonitor componentMonitor, Member member, Object componentInstance, IllegalAccessException e) -
box
-