代理-jdk动态代理

男娘i 2023-08-17 15:25 211阅读 0赞

1、基于接口的实现,要jdk动态代理的类必须要实现一个接口;

2、中介类:实现了InvocationHandler,并重写这个接口的 方法(public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{method.invoke(this.target, args);}),类似下面

  1. public class JDKProxy implements InvocationHandler {
  2. private Object targetObject;//需要代理的目标对象
  3. public Object newProxy(Object targetObject) {
  4. //将目标对象传入进行代理
  5. this.targetObject = targetObject;
  6. return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
  7. targetObject.getClass().getInterfaces(), this);//返回代理对象
  8. }
  9. public Object invoke(Object proxy, Method method, Object[] args)//invoke方法
  10. throws Throwable {
  11. Object ret = null; // 设置方法的返回值
  12. ret = method.invoke(targetObject, args); //invoke调用需要代理的方法
  13. return ret;
  14. }
  15. }

3、Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this)

  3.1:根据clazz.getInterfaces():循环遍历接口,动态生成接口实现类的代理类(比如:proxy0.java)

    生成的类会有InvocationHandler h的属性,构造方法会有参数进行这个h属性赋值,其余方法中会this.h.invoke(this,m,args)进行调用

  3.2:编译源代码,并且生成.class文件

  3.3:通过clazz.getClassLoader()的findClass加载生成的class到jvm并返回代理对象

  3.4:根据2.3的代理类通过构造传参this(JDKProxy ),实例化代理对象proxy0

  

转载于:https://www.cnblogs.com/aishangyizhihu/p/11383526.html

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读

    相关 代理-jdk动态代理

    1、基于接口的实现,要jdk动态代理的类必须要实现一个接口; 2、中介类:实现了InvocationHandler,并重写这个接口的 方法(public Object inv

    相关 代理模式-JDK动态代理

    对比静态代理 静态代理:是指在程序运行前就已经定义好了目标类的代理类。代理类与目标类的代理关系在程序运行之前就确立了。 动态代理:是指程序在整个运行过程中根本就不存在目标类