1 package org.codehaus.nanning.config;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.Iterator;
6 import java.util.List;
7
8 import org.codehaus.nanning.AspectFactory;
9 import org.codehaus.nanning.AspectInstance;
10
11 public class AspectSystem implements AspectFactory {
12 private List aspects = new ArrayList();
13
14 public void addAspect(Aspect aspect) {
15 aspects.add(aspect);
16 }
17
18 public Object newInstance(Class classIdentifier) {
19 AspectInstance aspectInstance = createAspectInstance(classIdentifier);
20 return aspectInstance.getProxy();
21 }
22
23 private AspectInstance createAspectInstance(Class classIdentifier) {
24 AspectInstance aspectInstance = new AspectInstance(this, classIdentifier);
25
26 initialize(aspectInstance);
27
28 return aspectInstance;
29 }
30
31 /***
32 * Let the aspects advise and introduce.
33 * @param aspectInstance
34 */
35 public void initialize(AspectInstance aspectInstance) {
36 introduce(aspectInstance);
37 advise(aspectInstance);
38 }
39
40 protected void advise(AspectInstance aspectInstance) {
41 for (Iterator aspectIterator = aspects.iterator(); aspectIterator.hasNext();) {
42 Aspect aspect = (Aspect) aspectIterator.next();
43
44 aspect.advise(aspectInstance);
45 }
46 }
47
48 protected void introduce(AspectInstance aspectInstance) {
49 for (Iterator iterator = aspects.iterator(); iterator.hasNext();) {
50 Aspect aspect = (Aspect) iterator.next();
51 aspect.introduce(aspectInstance);
52 }
53 }
54
55 /***
56 * Called after serialization, just advise.
57 * @param aspectInstance
58 */
59 public void reinitialize(AspectInstance aspectInstance) {
60 advise(aspectInstance);
61 }
62
63 public List getAspects() {
64 return Collections.unmodifiableList(aspects);
65 }
66 }
This page was automatically generated by Maven