1 /*************************************************************************************** 2 * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved. * 3 * http://aspectwerkz.codehaus.org * 4 * ---------------------------------------------------------------------------------- * 5 * The software in this package is published under the terms of the LGPL license * 6 * a copy of which has been included with this distribution in the license.txt file. * 7 **************************************************************************************/ 8 package org.codehaus.aspectwerkz.aspect; 9 10 import org.codehaus.aspectwerkz.CrossCuttingInfo; 11 import org.codehaus.aspectwerkz.joinpoint.JoinPoint; 12 13 import java.lang.reflect.Method; 14 15 /*** 16 * Interface for that all aspect container implementations must implement. 17 * 18 * @author <a href="mailto:jboner@codehaus.org">Jonas Bonér </a> 19 */ 20 public interface AspectContainer { 21 /*** 22 * Invokes the advice method on a per JVM basis. 23 * 24 * @param methodIndex the method index 25 * @param joinPoint the join point 26 * @return the result from the method invocation 27 */ 28 Object invokeAdvice(int methodIndex, JoinPoint joinPoint) throws Throwable; 29 30 /*** 31 * Invokes the advice method on a per JVM basis. 32 * 33 * @param methodIndex the method index 34 * @param joinPoint the join point 35 * @param methodToArgsIndexes 36 * 37 * @return the result from the method invocation 38 */ 39 Object invokeAdvice(int methodIndex, JoinPoint joinPoint, int[] methodToArgsIndexes) throws Throwable; 40 41 /*** 42 * Returns a specific advice by index. 43 * 44 * @param index the index 45 * @return the advice 46 */ 47 Method getAdvice(int index); 48 49 /*** 50 * Creates a new perJVM cross-cutting instance, if it already exists then return it. 51 * 52 * @return the cross-cutting instance 53 */ 54 Object createPerJvmAspect(); 55 56 /*** 57 * Creates a new perClass cross-cutting instance, if it already exists then return it. 58 * 59 * @param callingClass 60 * @return the cross-cutting instance 61 */ 62 Object createPerClassAspect(Class callingClass); 63 64 /*** 65 * Creates a new perInstance cross-cutting instance, if it already exists then return it. 66 * 67 * @param callingInstance 68 * @return the cross-cutting instance 69 */ 70 Object createPerInstanceAspect(Object callingInstance); 71 72 /*** 73 * Creates a new perThread cross-cutting instance, if it already exists then return it. 74 * 75 * @param thread the thread for the aspect 76 * @return the cross-cutting instance 77 */ 78 Object createPerThreadAspect(Thread thread); 79 80 /*** 81 * Returns the cross-cutting info. 82 * 83 * @return the cross-cutting info 84 */ 85 CrossCuttingInfo getCrossCuttingInfo(); 86 87 /*** 88 * Attach the introduction container to this aspect container to mirror the "aspect contains 0-n introduction" 89 * 90 * @param name of the introduction 91 * @param introContainer introduction container 92 */ 93 void addIntroductionContainer(String name, IntroductionContainer introContainer); 94 95 /*** 96 * Returns the introduction container of given name (introduction name) or null if not linked. 97 * 98 * @param name of the introduction 99 * @return introduction container 100 */ 101 IntroductionContainer getIntroductionContainer(String name); 102 }