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 Paul Hammant * 009 *****************************************************************************/ 010 011 package org.nanocontainer.reflection; 012 013 import java.io.Serializable; 014 015 import org.nanocontainer.NanoPicoContainer; 016 import org.picocontainer.MutablePicoContainer; 017 import org.picocontainer.PicoContainer; 018 import org.picocontainer.alternatives.ImplementationHidingPicoContainer; 019 import org.picocontainer.defaults.ComponentAdapterFactory; 020 import org.picocontainer.defaults.DefaultComponentAdapterFactory; 021 022 /** 023 * This is a MutablePicoContainer that supports soft composition and hides implementations where it can. 024 * <p/> 025 * In terms of implementation it adopts the behaviour of ImplementationHidingPicoContainer 026 * and DefaulNanoContainer 027 * 028 * @author Paul Hammant 029 * @author Michael Rimov 030 * @version $Revision: 2964 $ 031 */ 032 public class ImplementationHidingNanoPicoContainer extends AbstractNanoPicoContainer implements NanoPicoContainer, Serializable { 033 034 public ImplementationHidingNanoPicoContainer(ClassLoader classLoader, ComponentAdapterFactory caf, PicoContainer parent) { 035 super(new ImplementationHidingPicoContainer(caf, parent), classLoader); 036 } 037 038 039 public ImplementationHidingNanoPicoContainer(ClassLoader classLoader, PicoContainer parent) { 040 super(new ImplementationHidingPicoContainer(new DefaultComponentAdapterFactory(), parent), classLoader); 041 } 042 043 public ImplementationHidingNanoPicoContainer(PicoContainer pc) { 044 this(ImplementationHidingNanoPicoContainer.class.getClassLoader(), pc); 045 } 046 047 public ImplementationHidingNanoPicoContainer(ClassLoader classLoader) { 048 this(classLoader, null); 049 } 050 051 public ImplementationHidingNanoPicoContainer() { 052 this(ImplementationHidingNanoPicoContainer.class.getClassLoader(), null); 053 } 054 055 /** 056 * Copy Constructor. Makes a new ImplementationHidingNanoPicoContainer with the same 057 * attributes - ClassLoader, child PicoContainer type, ComponentAdapterFactory - 058 * as the parent. 059 * <p><tt>Note:</tt> This constructor is protected because are existing scripts 060 * that call <tt>new ImplementationHidingNanoPicoContainer(PicoContainer)</tt>, and they get this 061 * constructor instead (which has different behavior).</p> 062 * @param parent ImplementationHidingNanoPicoContainer 063 */ 064 protected ImplementationHidingNanoPicoContainer(final ImplementationHidingNanoPicoContainer parent) { 065 super(parent.getDelegate().makeChildContainer(), parent.getComponentClassLoader()); 066 } 067 068 069 protected AbstractNanoPicoContainer createChildContainer() { 070 return new ImplementationHidingNanoPicoContainer(this); 071 } 072 }