01: /*****************************************************************************
02: * Copyright (C) NanoContainer Organization. All rights reserved. *
03: * ------------------------------------------------------------------------- *
04: * The software in this package is published under the terms of the BSD *
05: * style license a copy of which has been included with this distribution in *
06: * the LICENSE.txt file. *
07: * *
08: * Original code by Aslak Hellesoy and Paul Hammant *
09: *****************************************************************************/package org.nanocontainer;
10:
11: import org.picocontainer.ComponentAdapter;
12: import org.picocontainer.MutablePicoContainer;
13: import org.picocontainer.Parameter;
14: import org.picocontainer.PicoIntrospectionException;
15: import org.picocontainer.PicoRegistrationException;
16:
17: import java.net.URL;
18:
19: /**
20: * A NanoContainer is a container that contains a PicoContainer. -Like
21: * <a href="http://www.monkeon.co.uk/russiandolls/">Russian dolls</a>.
22: *
23: * A NanoContainer adapts a {@link MutablePicoContainer} through a similar API that
24: * is based only on Strings. (It uses reflection to look up classes before registering them
25: * with the adapted PicoContainer). This adapter API is used primarily by the various
26: * {@link org.nanocontainer.script.ScriptedContainerBuilder} implementations in the
27: * org.nanocontainer.script.[scripting engine] packages.
28: *
29: * @author Paul Hammant
30: * @author Aslak Hellesøy
31: */
32: public interface NanoContainer {
33:
34: ComponentAdapter registerComponentImplementation(
35: String componentImplementationClassName)
36: throws PicoRegistrationException, ClassNotFoundException,
37: PicoIntrospectionException;
38:
39: ComponentAdapter registerComponentImplementation(Object key,
40: String componentImplementationClassName)
41: throws ClassNotFoundException;
42:
43: ComponentAdapter registerComponentImplementation(Object key,
44: String componentImplementationClassName,
45: Parameter[] parameters) throws ClassNotFoundException;
46:
47: ComponentAdapter registerComponentImplementation(Object key,
48: String componentImplementationClassName,
49: String[] parameterTypesAsString,
50: String[] parameterValuesAsString)
51: throws PicoRegistrationException, ClassNotFoundException,
52: PicoIntrospectionException;
53:
54: ComponentAdapter registerComponentImplementation(
55: String componentImplementationClassName,
56: String[] parameterTypesAsString,
57: String[] parameterValuesAsString)
58: throws PicoRegistrationException, ClassNotFoundException,
59: PicoIntrospectionException;
60:
61: /**
62: * Adds a new URL that will be used in classloading
63: *
64: * @param url
65: */
66: ClassPathElement addClassLoaderURL(URL url);
67:
68: /**
69: * Returns the wrapped PicoContainer instance (russian doll concept). The method name is short
70: * in order to favour the use of nano.pico from Groovy.
71: *
72: * @return the wrapped PicoContainer instance.
73: */
74: MutablePicoContainer getPico();
75:
76: ClassLoader getComponentClassLoader();
77:
78: /**
79: * Find a component instance matching the specified type.
80: *
81: * @param componentType the type of the component.
82: * @return the adapter matching the class.
83: */
84: Object getComponentInstanceOfType(String componentType);
85:
86: MutablePicoContainer addDecoratingPicoContainer(
87: Class picoContainerClass);
88:
89: }
|