1. 程式人生 > 實用技巧 >JDK Proxy動態代理的底層實現

JDK Proxy動態代理的底層實現

 1 /*
 2 * JDK動態代理的底層原理:返回實現了介面的匿名內部類。匿名內部類的方法的功能
 3 * 是通過InvokeHandler介面實現類的invoke方法實現*/
 4 
 5 import java.lang.reflect.InvocationHandler;
 6 import java.lang.reflect.Method;
 7 import java.lang.reflect.Proxy;
 8 
 9 interface Adder{
10     public Integer add(Integer a, Integer b);
11 }
12 
13 class Myproxy{
14 public static Adder getNewInstance(ClassLoader classLoader, final Class<?> clazz, InvocationHandler handler){ 15 //返回實現Adder介面的匿名內部類 16 return new Adder() { 17 @Override 18 public Integer add(Integer a, Integer b) { 19 try { 20 21 Method add = clazz.getMethod("add",Integer.class
,Integer.class); 22 Object[] args = {a,b}; 23 Object invoke = handler.invoke(this, add, args); 24 return (Integer) invoke; 25 } catch (Exception e) { 26 e.printStackTrace(); 27 } catch (Throwable throwable) {
28 throwable.printStackTrace(); 29 } 30 31 return null; 32 } 33 }; 34 } 35 } 36 37 public class JDKProxy_Source { 38 public static void main(String[] args){ 39 40 Adder adder = Myproxy.getNewInstance(Adder.class.getClassLoader(), Adder.class, new InvocationHandler() { 41 @Override 42 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 43 if ("add".equals(method.getName())) { 44 Integer a = (Integer) args[0]; 45 Integer b = (Integer) args[1]; 46 return a + b; 47 } 48 return null; 49 } 50 }); 51 System.out.println(adder.add(1,1)); 52 } 53 }