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 Joerg Schaible *
009 *****************************************************************************/
010
011 package org.picocontainer.defaults;
012
013 /**
014 * Interface for a guard implementation looking after cyclic dependencies.
015 *
016 * @author Jörg Schaible
017 * @since 1.1
018 */
019 public interface CyclicDependencyGuard {
020
021 /**
022 * Derive from this class and implement this function with the functionality
023 * to observe for a dependency cycle.
024 *
025 * @return a value, if the functionality result in an expression,
026 * otherwise just return <code>null</code>
027 */
028 public Object run();
029
030 /**
031 * Call the observing function. The provided guard will hold the {@link Boolean} value.
032 * If the guard is already <code>Boolean.TRUE</code> a {@link CyclicDependencyException}
033 * will be thrown.
034 *
035 * @param stackFrame the current stack frame
036 * @return the result of the <code>run</code> method
037 */
038 public Object observe(Class stackFrame);
039 }