0 Replies Latest reply on Sep 6, 2007 8:40 PM by roja

    Simple Field Interseption

    roja

      Hi,
      I am just wondering if it is possible to have the following work (i.e. print out: 20 10) without having to use the javassist classloader?

      class Observed {
      
       public int n;
      
       public int getN() {
       return n;
       }
      
       public void setN(int n) {
       this.n = n;
       }
      
      }
      
      class Observer {
      
       public static void writeX(Object target, int value) {
      
       System.out.println(value);
      
       }
      
      }
      
      public class ObsObrTest {
      
       public static void main(String[] args) throws Exception {
      
       ClassPool cp = ClassPool.getDefault();
      
       CtClass theObserved = cp.get("Observed");
      
       CtClass theObserver = cp.get("Observer");
      
       CodeConverter conv = new CodeConverter();
      
       conv.replaceFieldWrite(theObserved.getField("n"), theObserver, "writeX");
      
       theObserved.instrument(conv);
      
       Class c = theObserved.toClass();
      
       Observed instanceOfObserved = (Observed)c.newInstance();
      
       instanceOfObserved.n = 20; //should cause the output of 20
      
       instanceOfObserved.setN(10); //should cause the output of 10
      
       }
      }
      


      Cheers
      Roja