    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.behaviors;
    012
    013    import org.picocontainer.Behavior;
    014    import org.picocontainer.ComponentAdapter;
    015    import org.picocontainer.ObjectReference;
    016    import org.picocontainer.references.SimpleReference;
    017
    018    /**
    019     * <p>
    020     * {@link ComponentAdapter} implementation that caches the component instance.
    021     * </p>
    022     * <p>
    023     * This adapter supports components with a lifecycle, as it is a
    024     * {@link Behavior lifecycle manager} which will apply the delegate's
    025     * {@link org.picocontainer.LifecycleStrategy lifecycle strategy} to the cached
    026     * component instance. The lifecycle state is maintained so that the component
    027     * instance behaves in the expected way: it can't be started if already started,
    028     * it can't be started or stopped if disposed, it can't be stopped if not
    029     * started, it can't be disposed if already disposed.
    030     * </p>
    031     *
    032     * @author Mauro Talevi
    033     */
    034    @SuppressWarnings("serial")
    035    public class Cached<T> extends Stored<T> {
    036
    037
    038        public Cached(ComponentAdapter delegate) {
    039                    this(delegate, new SimpleReference<Instance<T>>());
    040            }
    041
    042            public Cached(ComponentAdapter delegate, ObjectReference<Instance<T>> instanceReference) {
    043                    super(delegate, instanceReference);
    044            }
    045
    046        public String getDescriptor() {
    047            return "Cached" + getLifecycleDescriptor();
    048        }
    049    }