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 *****************************************************************************/
009package org.picocontainer;
010
011/**
012 * A way to refer to objects that are stored in "awkward" places (for example inside a
013 * <code>HttpSession</code> or {@link ThreadLocal}).
014 * <p/>
015 * This interface is typically implemented by someone integrating Pico into an existing container.
016 *
017 * @author Joe Walnes
018 */
019public interface ObjectReference<T> {
020    /**
021     * Retrieve an actual reference to the object. Returns null if the reference is not available
022     * or has not been populated yet.
023     * 
024     * @return an actual reference to the object.
025     */
026    T get();
027
028    /**
029     * Assign an object to the reference.
030     * 
031     * @param item the object to assign to the reference. May be <code>null</code>.
032     */
033    void set(T item);
034}