动态代理学习笔记

来源:互联网 发布:网络安全措施 编辑:程序博客网 时间:2024/06/04 19:13

动态代理的实现流程(JDK版)

预备工作:指定类加载器,被代理的接口,一个代理类(在JDK的动态代理中以InvocationHandler接口的形式存在)

工作步骤:动态代理顾名思义就是要动态的生成一个代理类来代替静态代理中程序员手写代理类的方式,类似于一种生成自动生成代理类的框架(姑且叫框架没想到好的词),那我们需要一个怎样的代理类?
答案是 1.代理类和被代理类实现同一个接口,代理类对被代理类的方法进行扩展
至于怎么扩展,应该交给调用者去实现,所以JDK中通过了InvocationHandler作为回调
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;
这里的method就是被代理的方法
也就是说 我们生产的代理类需要一个InvocationHandler的引用来接受我们实现后的类的对象。
JDK中采用的方法是让代理类继承Proxy类,Proxy类中有InvocationHandler的引用
protected InvocationHandler h;
生产这个动态代理文件后再通过类加载器将其加载,通过反射创建实例对象
这里是通过class拿到constructor,再通过constructor.newInstance创建对象的,因为创建的时候需要把InvocationHandler的实现类传进来,class的newInstance无法做到传参。

那如果自己写JDK中的动态代理,则需要我们自定义一个类加载器,然后是完成一段生成代理类本地文件的功能,我们需要的代理类的内容写入一个.java文件中,调用java的complier进行编译产生一个本地.class文件。然后通过类加载器将其加载到JVM,拿到Class后就是通过他的Constructor进行newInstance实例化

原创粉丝点击