静态代理和动态代理的简单实现

静态代理

静态代理:在编译期,代理类就写好了,如下图中的ZhangSanLawyer。

1、编写Speaker接口。

 2、编写目标类ZhangSan,实现Speaker接口。

3、编写ZhangSan的代理类ZhangSanLawyer。

 

4、编写Court(法庭)类,实现ZhangSanLawyer对ZhangSan的代理。

 

问题:如果李四、王五也需要同样的代理,律师的重复工作较大。

动态代理

动态代理:运行期产生的代理类。

1、编写Speaker接口。

 2、编写目标类ZhangSan,实现Speaker接口。

3、编写代理类LawyerProxy,可以代理任何人。

在invoke方法的参数中,proxy是生成的代理对象;method是ZhangSan类的某个具体方法;args是ZhangSan类某个方法的具体入参,在方法反射调用时使用。

  4、编写Court(法庭)类,实现ZhangSanLawyer对ZhangSan的代理。

参数1: 需要代理的目标类的类加载器

参数2: 动态代理类需要实现的接口,即需要代理的目标类的所有接口

参数3: 实现了invocationHandler接口的对象

5、原理解释

通过Proxy.newProxyInstance方法获取代理对象时,会根据第二个参数传入的接口Speaker,实现Speaker接口中的所有方法,而其中每个方法都是通过反射调用的第三个参数传入的LawyerProxy中的invoke方法,最终将生成的代理类也拥有了其中的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值