1 package com.tirsen.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 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 aspects = new ArrayList (); 14 15 public void addAspect(Aspect aspect) { 16 aspects.add(aspect); 17 } 18 19 public Object newInstance(Class classIdentifier) { 20 AspectInstance aspectInstance = createAspectInstance(classIdentifier); 21 return aspectInstance.getProxy(); 22 } 23 24 private AspectInstance createAspectInstance(Class classIdentifier) { 25 AspectInstance aspectInstance = new AspectInstance(this, classIdentifier); 26 27 initialize(aspectInstance); 28 29 return aspectInstance; 30 } 31 32 36 public void initialize(AspectInstance aspectInstance) { 37 introduce(aspectInstance); 38 advice(aspectInstance); 39 } 40 41 protected void advice(AspectInstance aspectInstance) { 42 for (Iterator 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 iterator = aspects.iterator(); iterator.hasNext();) { 51 Aspect aspect = (Aspect) iterator.next(); 52 aspect.introduce(aspectInstance); 53 } 54 } 55 56 60 public void reinitialize(AspectInstance aspectInstance) { 61 advice(aspectInstance); 62 } 63 64 public List getAspects() { 65 return Collections.unmodifiableList(aspects); 66 } 67 } 68 | Popular Tags |