KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tirsen > nanning > config > InterceptorAspect


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