001 /*****************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 * Original code by *
009 *****************************************************************************/
010 package org.picocontainer.defaults;
011
012 import org.picocontainer.ComponentAdapter;
013 import org.picocontainer.Parameter;
014 import org.picocontainer.PicoIntrospectionException;
015
016 /**
017 * <p>
018 * A component adapter factory is responsible for creating
019 * {@link ComponentAdapter} component adapters. The main use of the component adapter factory is
020 * inside {@link DefaultPicoContainer#DefaultPicoContainer(ComponentAdapterFactory)}, where it can
021 * be used to customize the default component adapter that is used when none is specified
022 * explicitly.
023 * </p>
024 *
025 * @author Jon Tirsén
026 * @author Mauro Talevi
027 * @version $Revision: 2230 $
028 */
029 public interface ComponentAdapterFactory {
030
031 /**
032 * Create a new component adapter based on the specified arguments.
033 *
034 * @param componentKey the key to be associated with this adapter. This value should be returned
035 * from a call to {@link ComponentAdapter#getComponentKey()} on the created adapter.
036 * @param componentImplementation the implementation class to be associated with this adapter.
037 * This value should be returned from a call to
038 * {@link ComponentAdapter#getComponentImplementation()} on the created adapter. Should not
039 * be null.
040 * @param parameters additional parameters to use by the component adapter in constructing
041 * component instances. These may be used, for example, to make decisions about the
042 * arguments passed into the component constructor. These should be considered hints; they
043 * may be ignored by some implementations. May be null, and may be of zero length.
044 * @return a new component adapter based on the specified arguments. Should not return null.
045 * @throws PicoIntrospectionException if the creation of the component adapter results in a
046 * {@link PicoIntrospectionException}.
047 * @throws AssignabilityRegistrationException
048 * if the creation of the component adapter results in a
049 * {@link AssignabilityRegistrationException}.
050 * @throws NotConcreteRegistrationException
051 * if the creation of the component adapter results in a
052 * {@link NotConcreteRegistrationException}.
053 */
054 ComponentAdapter createComponentAdapter(Object componentKey,
055 Class componentImplementation,
056 Parameter[] parameters) throws PicoIntrospectionException, AssignabilityRegistrationException, NotConcreteRegistrationException;
057
058
059 }