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 }

 

posted @ 2020-09-09 20:35  日进一卒  阅读(328)  评论(0)    收藏  举报