1 /*************************************************
2 * Copyright (c) Shen Li. All rights reserved. *
3 * http://joyaop.sourceforge.net *
4 * -------------------------------------------- *
5 * Distributable under LGPL license. *
6 * See terms of license at gnu.org. *
7 ************************************************/
8 package net.sf.joyaop.impl.aspect;
9
10 import net.sf.joyaop.AbstractInterceptor;
11 import net.sf.joyaop.framework.RuntimeAspect;
12 import net.sf.joyaop.impl.InvocationImpl;
13 import net.sf.joyaop.impl.RuntimeAspectInstance;
14
15 /***
16 * @author Shen Li
17 */
18 public class AbstractGenericInterceptorAspectImpl extends BaseInterceptorAspectImpl {
19 public void setAspectClass(Class aspectClass) {
20 if (!AbstractInterceptor.class.isAssignableFrom(aspectClass)) {
21 throw new IllegalArgumentException("Class " + aspectClass.getName() + " doesn't implement " + AbstractInterceptor.class.getName());
22 }
23 super.setAspectClass(aspectClass);
24 }
25
26 public RuntimeAspectInstance createRuntimeAspectInstance(Class originalClass) {
27 return new AbstractGenericInterceptorAspectInstance(this, originalClass);
28 }
29
30 public static class AbstractGenericInterceptorAspectInstance extends RuntimeAspectInstance {
31 public AbstractGenericInterceptorAspectInstance(RuntimeAspect aspect, Class originalClass) {
32 super(aspect, originalClass);
33 }
34
35 public Object invoke(InvocationImpl invocation) throws Throwable {
36 return ((AbstractInterceptor) getImplementation()).execute();
37 }
38
39 public boolean allowRecursiveInvocation() {
40 return false;
41 }
42 }
43 }