001 /*****************************************************************************
002 * Copyright (C) NanoContainer 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 Aslak Hellesoy and Paul Hammant *
009 *****************************************************************************/
010
011 package org.nanocontainer;
012
013 import org.picocontainer.ComponentAdapter;
014 import org.picocontainer.MutablePicoContainer;
015 import org.picocontainer.Parameter;
016 import org.picocontainer.PicoIntrospectionException;
017 import org.picocontainer.PicoRegistrationException;
018
019 import java.net.URL;
020
021 /**
022 * A NanoContainer is a container that contains a PicoContainer. -Like
023 * <a href="http://www.monkeon.co.uk/russiandolls/">Russian dolls</a>.
024 *
025 * A NanoContainer adapts a {@link MutablePicoContainer} through a similar API that
026 * is based only on Strings. (It uses reflection to look up classes before registering them
027 * with the adapted PicoContainer). This adapter API is used primarily by the various
028 * {@link org.nanocontainer.script.ScriptedContainerBuilder} implementations in the
029 * org.nanocontainer.script.[scripting engine] packages.
030 *
031 * @author Paul Hammant
032 * @author Aslak Hellesøy
033 */
034 public interface NanoContainer {
035
036 ComponentAdapter registerComponentImplementation(String componentImplementationClassName) throws PicoRegistrationException, ClassNotFoundException, PicoIntrospectionException;
037
038 ComponentAdapter registerComponentImplementation(Object key, String componentImplementationClassName) throws ClassNotFoundException;
039
040 ComponentAdapter registerComponentImplementation(Object key, String componentImplementationClassName, Parameter[] parameters) throws ClassNotFoundException;
041
042
043 ComponentAdapter registerComponentImplementation(Object key,
044 String componentImplementationClassName,
045 String[] parameterTypesAsString,
046 String[] parameterValuesAsString) throws PicoRegistrationException, ClassNotFoundException, PicoIntrospectionException;
047
048 ComponentAdapter registerComponentImplementation(String componentImplementationClassName,
049 String[] parameterTypesAsString,
050 String[] parameterValuesAsString) throws PicoRegistrationException, ClassNotFoundException, PicoIntrospectionException;
051
052 /**
053 * Adds a new URL that will be used in classloading
054 *
055 * @param url
056 */
057 ClassPathElement addClassLoaderURL(URL url);
058
059 /**
060 * Returns the wrapped PicoContainer instance (russian doll concept). The method name is short
061 * in order to favour the use of nano.pico from Groovy.
062 *
063 * @return the wrapped PicoContainer instance.
064 */
065 MutablePicoContainer getPico();
066
067 ClassLoader getComponentClassLoader();
068
069 /**
070 * Find a component instance matching the specified type.
071 *
072 * @param componentType the type of the component.
073 * @return the adapter matching the class.
074 */
075 Object getComponentInstanceOfType(String componentType);
076
077
078 MutablePicoContainer addDecoratingPicoContainer(Class picoContainerClass);
079
080
081 }