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 * Idea by Rachel Davies, Original code by various *
009 *****************************************************************************/
010 package org.nanocontainer.aop;
011
012 import org.picocontainer.PicoContainer;
013 import org.picocontainer.defaults.ComponentAdapterFactory;
014
015 /**
016 * Produces <code>AspectablePicoContainer</code> objects. Mixes in an
017 * <code>AspectsContainer</code> with a
018 * <code>org.picocontainer.MutablePicoContainer</code> to produce an
019 * <code>AspectablePicoContainer</code>.
020 *
021 * @author Stephen Molitor
022 * @author Mauro Talevi
023 * @version $Revision: 3144 $
024 */
025 public interface AspectablePicoContainerFactory {
026
027 /**
028 * Creates a new <code>AspectablePicoContainer</code>.
029 *
030 * @param containerClass the class of the basic container to delegate to.
031 * @param aspectsManager the aspects manager used to register and apply
032 * aspects.
033 * @param componentAdapterFactory the delegate component adapter factory
034 * used to produce components.
035 * @param parent the parent container.
036 * @return a new <code>AspectablePicoContainer</code>.
037 */
038 public AspectablePicoContainer createContainer(Class containerClass, AspectsManager aspectsManager,
039 ComponentAdapterFactory componentAdapterFactory, PicoContainer parent);
040
041 /**
042 * Creates a new <code>AspectablePicoContainer</code>.
043 *
044 * @param containerClass the class of the basic container to delegate to.
045 * @param componentAdapterFactory the delegate component adapter factory
046 * used to produce components.
047 * @param parent the parent container.
048 * @return a new <code>AspectablePicoContainer</code>.
049 */
050 AspectablePicoContainer createContainer(Class containerClass, ComponentAdapterFactory componentAdapterFactory,
051 PicoContainer parent);
052
053 /**
054 * Creates a new <code>AspectablePicoContainer</code>. Uses
055 * <code>org.picocontainer.defaults.DefaultPicoContainer</code> as the
056 * delegate container.
057 *
058 * @param componentAdapterFactory the delegate component adapter factory
059 * used to produce components.
060 * @param parent the parent container.
061 * @return a new <code>AspectablePicoContainer</code>.
062 */
063 AspectablePicoContainer createContainer(ComponentAdapterFactory componentAdapterFactory, PicoContainer parent);
064
065 /**
066 * Creates a new <code>AspectablePicoContainer</code>. Uses
067 * <code>org.picocontainer.defaults.DefaultPicoContainer</code> as the
068 * delegate container.
069 *
070 * @param componentAdapterFactory the delegate component adapter factory
071 * used to produce components.
072 * @return a new <code>AspectablePicoContainer</code>.
073 */
074 AspectablePicoContainer createContainer(ComponentAdapterFactory componentAdapterFactory);
075
076 /**
077 * Creates a new <code>AspectablePicoContainer</code>. Uses
078 * <code>org.picocontainer.defaults.DefaultPicoContainer</code> as the
079 * delegate container. Uses
080 * <code>org.picocontainer.defaults.DefaultComponentAdapterFactory</code>
081 * as the delegate component adapter factory.
082 *
083 * @param parent the parent container.
084 * @return a new <code>AspectablePicoContainer</code>.
085 */
086 AspectablePicoContainer createContainer(PicoContainer parent);
087
088 /**
089 * Creates a new <code>AspectablePicoContainer</code>. Uses
090 * <code>org.picocontainer.defaults.DefaultPicoContainer</code> as the
091 * delegate container. Uses
092 * <code>org.picocontainer.defaults.DefaultComponentAdapterFactory</code>
093 * as the delegate component adapter factory.
094 *
095 * @return a new <code>AspectablePicoContainer</code>.
096 */
097 AspectablePicoContainer createContainer();
098
099 /**
100 * Make a child <code>AspectablePicoContainer</code> of a given <code>AspectablePicoContainer</code>.
101 * The child container will be obtained aspectifying <code>MutablePicoContainer#makeChildContainer()</code>.
102 *
103 * @param aspectsManager the aspects manager used to register and apply aspects.
104 * @param parent the parent AspectablePicoContainer
105 * @return A child AspectablePicoContainer
106 */
107 AspectablePicoContainer makeChildContainer(AspectsManager aspectsManager, AspectablePicoContainer parent);
108
109 /**
110 * Make a child <code>AspectablePicoContainer</code> of a given <code>AspectablePicoContainer</code>
111 * The child container will be obtained aspectifying <code>MutablePicoContainer#makeChildContainer()</code>.
112 *
113 * @param parent the parent AspectablePicoContainer
114 * @return A child AspectablePicoContainer
115 */
116 AspectablePicoContainer makeChildContainer(AspectablePicoContainer parent);
117
118 }