KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.tirsen.nanning.config;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Collections JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.List JavaDoc;
7
8 import com.tirsen.nanning.AspectFactory;
9 import com.tirsen.nanning.AspectInstance;
10 import com.tirsen.nanning.MixinInstance;
11
12 public class AspectSystem implements AspectFactory {
13     private List JavaDoc aspects = new ArrayList JavaDoc();
14
15     public void addAspect(Aspect aspect) {
16         aspects.add(aspect);
17     }
18
19     public Object JavaDoc newInstance(Class JavaDoc classIdentifier) {
20         AspectInstance aspectInstance = createAspectInstance(classIdentifier);
21         return aspectInstance.getProxy();
22     }
23
24     private AspectInstance createAspectInstance(Class JavaDoc classIdentifier) {
25         AspectInstance aspectInstance = new AspectInstance(this, classIdentifier);
26
27         initialize(aspectInstance);
28
29         return aspectInstance;
30     }
31
32     /**
33      * Let the aspect advice and introduce.
34      * @param aspectInstance
35      */

36     public void initialize(AspectInstance aspectInstance) {
37         introduce(aspectInstance);
38         advice(aspectInstance);
39     }
40
41     protected void advice(AspectInstance aspectInstance) {
42         for (Iterator JavaDoc aspectIterator = aspects.iterator(); aspectIterator.hasNext();) {
43             Aspect aspect = (Aspect) aspectIterator.next();
44
45             aspect.advise(aspectInstance);
46         }
47     }
48
49     protected void introduce(AspectInstance aspectInstance) {
50         for (Iterator JavaDoc iterator = aspects.iterator(); iterator.hasNext();) {
51             Aspect aspect = (Aspect) iterator.next();
52             aspect.introduce(aspectInstance);
53         }
54     }
55
56     /**
57      * Called after serialization, just advice.
58      * @param aspectInstance
59      */

60     public void reinitialize(AspectInstance aspectInstance) {
61         advice(aspectInstance);
62     }
63
64     public List JavaDoc getAspects() {
65         return Collections.unmodifiableList(aspects);
66     }
67 }
68
Popular Tags