View Javadoc
1 package org.codehaus.nanning.config; 2 3 import org.codehaus.nanning.AspectException; 4 import org.codehaus.nanning.AspectInstance; 5 import org.codehaus.nanning.MethodInterceptor; 6 7 public class InterceptorAspect implements Aspect { 8 public static final int SINGLETON = 0; 9 public static final int PER_METHOD = SINGLETON + 1; 10 public static final int PER_INSTANCE = PER_METHOD + 1; 11 12 private Class interceptorClass; 13 private int stateManagement; 14 private MethodInterceptor singletonInterceptor; 15 private Pointcut pointcut; 16 17 public InterceptorAspect(MethodInterceptor interceptor) { 18 this(P.all(), interceptor); 19 } 20 21 public InterceptorAspect(Class interceptorClass, int stateManagement) { 22 this(P.all(), interceptorClass, stateManagement); 23 } 24 25 public InterceptorAspect(Pointcut pointcut, Class interceptorClass, int stateManagement) { 26 this.stateManagement = stateManagement; 27 assert stateManagement == SINGLETON || stateManagement == PER_METHOD || stateManagement == PER_INSTANCE 28 : "SINGLETON, PER_METHOD and PER_INSTANCE is supported only, not " + stateManagement; 29 30 if (stateManagement == SINGLETON) { 31 singletonInterceptor = createInterceptor(); 32 } 33 34 setPointcut(pointcut); 35 36 this.interceptorClass = interceptorClass; 37 } 38 39 public void setPointcut(Pointcut pointcut) { 40 this.pointcut = pointcut; 41 } 42 43 public InterceptorAspect(Pointcut pointcut, MethodInterceptor interceptor) { 44 this.pointcut = pointcut; 45 singletonInterceptor = interceptor; 46 stateManagement = SINGLETON; 47 } 48 49 public Class getInterceptorClass() { 50 return interceptorClass; 51 } 52 53 public int getStateManagement() { 54 return stateManagement; 55 } 56 57 private MethodInterceptor createInterceptor() { 58 try { 59 return (MethodInterceptor) interceptorClass.newInstance(); 60 } catch (Exception e) { 61 throw new AspectException(e); 62 } 63 } 64 65 public void introduce(AspectInstance instance) { 66 } 67 68 public void advise(AspectInstance instance) { 69 if (stateManagement == SINGLETON) { 70 pointcut.advise(instance, singletonInterceptor); 71 72 } else if (stateManagement == PER_INSTANCE) { 73 pointcut.advise(instance, createInterceptor()); 74 75 } else if (stateManagement == PER_METHOD) { 76 pointcut.advise(instance, interceptorClass); 77 78 } 79 } 80 81 public Pointcut getPointcut() { 82 return pointcut; 83 } 84 }

This page was automatically generated by Maven