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 Paul Hammant & Obie Fernandez & Aslak *
009 *****************************************************************************/
010
011 package org.picocontainer;
012
013 import java.lang.reflect.Constructor;
014 import java.lang.reflect.Method;
015
016 /**
017 * A component monitor is responsible for monitoring the component instantiation
018 * and method invocation.
019 *
020 * @author Paul Hammant
021 * @author Obie Fernandez
022 * @author Aslak Hellesøy
023 * @author Mauro Talevi
024 * @version $Revision: 2971 $
025 * @since 1.2
026 */
027 public interface ComponentMonitor {
028
029 /**
030 * Event thrown as the component is being instantiated using the given constructor
031 *
032 * @param constructor the Constructor used to instantiate the component
033 */
034 void instantiating(Constructor constructor);
035
036 /**
037 * Event thrown after the component has been instantiated using the given constructor
038 *
039 * @param constructor the Constructor used to instantiate the component
040 * @param duration the duration in millis of the instantiation
041 * @deprecated since 1.3
042 */
043 void instantiated(Constructor constructor, long duration);
044
045 /**
046 * Event thrown after the component has been instantiated using the given constructor.
047 * This should be called for both Constructor and Setter DI.
048 *
049 * @param constructor the Constructor used to instantiate the component
050 * @param instantiated the component that was instantiated by PicoContainer
051 * @param injected the components during instantiation.
052 * @param duration the duration in millis of the instantiation
053 * @since 1.3
054 */
055
056 void instantiated(Constructor constructor, Object instantiated, Object[] injected, long duration);
057
058 /**
059 * Event thrown if the component instantiation failed using the given constructor
060 *
061 * @param constructor the Constructor used to instantiate the component
062 * @param cause the Exception detailing the cause of the failure
063 */
064 void instantiationFailed(Constructor constructor, Exception cause);
065
066 /**
067 * Event thrown as the component method is being invoked on the given instance
068 *
069 * @param method the Method invoked on the component instance
070 * @param instance the component instance
071 */
072 void invoking(Method method, Object instance);
073
074 /**
075 * Event thrown after the component method has been invoked on the given instance
076 *
077 * @param method the Method invoked on the component instance
078 * @param instance the component instance
079 * @param duration the duration in millis of the invocation
080 */
081 void invoked(Method method, Object instance, long duration);
082
083 /**
084 * Event thrown if the component method invocation failed on the given instance
085 *
086 * @param method the Method invoked on the component instance
087 * @param instance the component instance
088 * @param cause the Exception detailing the cause of the failure
089 */
090 void invocationFailed(Method method, Object instance, Exception cause);
091
092 /**
093 * Event thrown if a lifecycle method invocation - start, stop or dispose -
094 * failed on the given instance
095 *
096 * @param method the lifecycle Method invoked on the component instance
097 * @param instance the component instance
098 * @param cause the RuntimeException detailing the cause of the failure
099 */
100 void lifecycleInvocationFailed(Method method, Object instance, RuntimeException cause);
101
102
103 }