1 8 package jfun.yan; 9 15 16 22 class GuardedComponent<T> extends DelegatingComponent { 23 private transient ThreadLocal run_guard = new ThreadLocal (); 24 private transient ThreadLocal verify_guard = new ThreadLocal (); 25 private transient ThreadLocal get_type_guard = new ThreadLocal (); 26 private void readObject(java.io.ObjectInputStream in) 27 throws ClassNotFoundException , java.io.IOException { 28 in.defaultReadObject(); 29 run_guard = new ThreadLocal (); 30 verify_guard = new ThreadLocal (); 31 get_type_guard = new ThreadLocal (); 32 } 33 private void enter(ThreadLocal g){ 34 final Object frame = g.get(); 35 if(frame==null){ 36 g.set(this); 37 } 38 else{ 39 throw new CyclicDependencyException(); 40 } 41 } 42 private void leave(ThreadLocal g){ 43 g.set(null); 44 } 45 46 GuardedComponent(final Component<T> cc) { 47 super(cc); 48 } 49 50 public Object create(Dependency ac){ 51 enter(run_guard); 52 try{ 53 return super.create(ac); 54 } 55 finally{leave(run_guard);} 56 } 57 public Class verify(Dependency ac){ 58 enter(verify_guard); 59 try{ 60 return super.verify(ac); 61 } 62 finally{leave(verify_guard);} 63 } 64 public Class getType(){ 65 enter(get_type_guard); 66 try{ 67 return super.getType(); 68 } 69 finally{leave(get_type_guard);} 70 71 } 72 public Component guard(){return this;} 73 public boolean isSingleton(){ 74 return getDelegateTarget().isSingleton(); 75 } 76 } 77 | Popular Tags |