JDK动态代理粗解

前一篇文章,稍微讲解了一下静态代理的原理,分为三部曲

  第一步是定义一个共同使用的接口供目标类和代理类使用

  第二步是代理类和目标类同时实现该接口,并且,代理类的实现类中需要有目标类的引用

  第三步创建真实类对象和代理类对象,同时将真实类的引用传给代理类对象,调用代理类的方法,执行目标类的业务

相比于静态代理,这种在开始就已经定义好了代理类,动态代理的区别就是代理类对象的定义是有jmv动态生成的,jdk的动态代理借助InvocationHandle接口和Proxy类共同完成。

1.java.lang.reflect.Proxy:是jdk动态代理的主类

2.java.lang.reflect.InvocationHandler:是一个调用处理器,需要我们自定义其invoke方法,用于实现对于真实委托类的代理访问

jdk动态代理创建对象的过程步骤如下:

1.实现IncocationHandle接口创建自己的调用处理器,(调用处理器中需要引入目标类的实例)

InvocationHandler handler = new InvocationHandlerImpl(T target); 

2.通过Proxy对象指定类装载器和一组interface接口,创建代理类

Class clazz = Proxy.getProxyClass(classLoader, new Class[] { Interface.class, ... });

3.通过反射机制获取动态代理类的构造方法,其参数是一个代用处理器类型的接口

Constructor constructor = clazz.getConstructor(new Class[] { InvocationHandler.class });

4.通过以上构造函数动态创建动态代理类的实例,构造是传入调用处理器作为唯一入参

 

以上是jdk动态代理标准的实现过程,作为简化,Proxy类中提供了另外一个方法newProxyInstance,相当于是封装了2,3,4步

因此,只需两步就能完成动态代理的对象的创建

1.InvocationHandler handler = new InvocationHandlerImpl(..); 

2.// 通过 Proxy 直接创建动态代理类实例
  Interface proxy = (Interface)Proxy.newProxyInstance( classLoader, 
      new Class[] { Interface.class }, 
      handler );
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值