Java Reflection InvocationHandler implement

Description

Java Reflection InvocationHandler implement

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface Adder {
   int add(int a, int b);
}

class MyObject implements Adder {
   public int add(int a, int b) {
      System.out.println("In add(): received: " + a + " and " + b);
      int result = a + b;
      System.out.println("In add(): Sent: " + result);
      return result;
   }//from w w w  .j  av a  2  s. c  o  m
}

class MyHandler implements InvocationHandler {
   Object target;

   public MyHandler(Object t) {
      target = t;
   }

   public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
      double start = System.nanoTime();
      Object o = m.invoke(target, args);
      double ellapseTime = System.nanoTime() - start;
      System.out.println(m.getName() + "() took " + ellapseTime + " ns");
      return o;
   }
}

public class Main {
   public static void main(String args[]) throws Exception {
      MyObject o = new MyObject();
      Adder s = (Adder) Proxy.newProxyInstance(o.getClass().getClassLoader(), o.getClass().getInterfaces(),
            new MyHandler(o));
      int x = 4, y = 3;
      int result = s.add(x, y);
      System.out.println("In caller: sent: " + x + " and " + y);
      System.out.print("In caller: received(" + x + "+" + y + "=): " + result);
   }
}



PreviousNext

Related