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    package org.picocontainer;
009    
010    /**
011     * An interface which specifies the lifecycle strategy on the component instance.
012     * Lifecycle strategies are used by component adapters to delegate the lifecycle
013     * operations on the component instances.
014     *
015     * @author Paul Hammant
016     * @author Peter Royal
017     * @author Jörg Schaible
018     * @author Mauro Talevi
019     * @see org.picocontainer.Startable
020     * @see org.picocontainer.Disposable
021     */
022    public interface LifecycleStrategy {
023        
024        /**
025         * Invoke the "start" method on the component instance if this is startable.
026         * It is up to the implementation of the strategy what "start" and "startable" means.
027         * 
028         * @param component the instance of the component to start
029         */
030        void start(Object component);
031        
032        /**
033         * Invoke the "stop" method on the component instance if this is stoppable.
034         * It is up to the implementation of the strategy what "stop" and "stoppable" means.
035         * 
036         * @param component the instance of the component to stop
037         */
038        void stop(Object component);
039    
040        /**
041         * Invoke the "dispose" method on the component instance if this is disposable.
042         * It is up to the implementation of the strategy what "dispose" and "disposable" means.
043         * 
044         * @param component the instance of the component to dispose
045         */
046        void dispose(Object component);
047    
048        /**
049         * Test if a component instance has a lifecycle.
050         * @param type the component's type
051         * 
052         * @return <code>true</code> if the component has a lifecycle
053         */
054        boolean hasLifecycle(Class<?> type);
055    
056        /**
057         * Is a component eager (not lazy) in that it should start when start() or equivalent is called,
058         * or lazy (it will only start on first getComponent() ).
059         * The default is the first of those two.
060         *
061         * @param adapter
062         * @return true if lazy, false if not lazy
063         */
064        boolean isLazy(ComponentAdapter<?> adapter);
065    }