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 * Original code by *
009 *****************************************************************************/
010 package org.picocontainer.defaults;
011
012 import java.util.HashMap;
013 import java.util.Map;
014
015 import org.picocontainer.ComponentAdapter;
016 import org.picocontainer.Parameter;
017 import org.picocontainer.PicoIntrospectionException;
018
019 /**
020 * A {@link ComponentAdapterFactory} that creates
021 * {@link BeanPropertyComponentAdapter} instances.
022 *
023 * @author Aslak Hellesøy
024 * @version $Revision: 2320 $
025 * @since 1.0
026 */
027 public class BeanPropertyComponentAdapterFactory extends DecoratingComponentAdapterFactory {
028 private Map adapterCache = new HashMap();
029
030 /**
031 * Construct a BeanPropertyComponentAdapterFactory.
032 *
033 * @param delegate the wrapped factory.
034 */
035 public BeanPropertyComponentAdapterFactory(ComponentAdapterFactory delegate) {
036 super(delegate);
037 }
038
039 /**
040 * {@inheritDoc}
041 */
042 public ComponentAdapter createComponentAdapter(Object componentKey, Class componentImplementation, Parameter[] parameters) throws PicoIntrospectionException, AssignabilityRegistrationException, NotConcreteRegistrationException {
043 ComponentAdapter decoratedAdapter = super.createComponentAdapter(componentKey, componentImplementation, parameters);
044 BeanPropertyComponentAdapter propertyAdapter = new BeanPropertyComponentAdapter(decoratedAdapter);
045 adapterCache.put(componentKey, propertyAdapter);
046 return propertyAdapter;
047 }
048
049 // TODO: What is this method for? It is not used in complete Pico/Nano and caching is normally done by CachingCA ...
050 /**
051 * @deprecated
052 */
053 public BeanPropertyComponentAdapter getComponentAdapter(Object key) {
054 return (BeanPropertyComponentAdapter) adapterCache.get(key);
055 }
056 }