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 Aslak Hellesoy and Paul Hammant * 009 *****************************************************************************/ 010 011 package org.picocontainer.gems.adapters; 012 013 import com.thoughtworks.proxy.ProxyFactory; 014 import com.thoughtworks.proxy.factory.StandardProxyFactory; 015 016 import org.picocontainer.ComponentAdapter; 017 import org.picocontainer.Parameter; 018 import org.picocontainer.PicoIntrospectionException; 019 import org.picocontainer.defaults.AssignabilityRegistrationException; 020 import org.picocontainer.defaults.ComponentAdapterFactory; 021 import org.picocontainer.defaults.DecoratingComponentAdapterFactory; 022 import org.picocontainer.defaults.DefaultComponentAdapterFactory; 023 import org.picocontainer.defaults.NotConcreteRegistrationException; 024 025 026 /** 027 * Hides implementation. 028 * 029 * @author Paul Hammant 030 * @author Aslak Hellesøy 031 * @version $Revision: 2252 $ 032 * @see HotSwappingComponentAdapter 033 */ 034 public class HotSwappingComponentAdapterFactory extends DecoratingComponentAdapterFactory { 035 private final ProxyFactory proxyFactory; 036 037 public HotSwappingComponentAdapterFactory() { 038 this(new DefaultComponentAdapterFactory()); 039 } 040 041 public HotSwappingComponentAdapterFactory(ComponentAdapterFactory delegate) { 042 this(delegate, new StandardProxyFactory()); 043 } 044 045 public HotSwappingComponentAdapterFactory(ComponentAdapterFactory delegate, ProxyFactory proxyFactory) { 046 super(delegate); 047 this.proxyFactory = proxyFactory; 048 } 049 050 public ComponentAdapter createComponentAdapter(Object componentKey, Class componentImplementation, Parameter[] parameters) 051 throws PicoIntrospectionException, AssignabilityRegistrationException, NotConcreteRegistrationException { 052 ComponentAdapter componentAdapter = super.createComponentAdapter(componentKey, componentImplementation, parameters); 053 return new HotSwappingComponentAdapter(componentAdapter, proxyFactory); 054 } 055 }