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 }