对动态代理(DynamicProxy)的理解

1、动态代理属于AOP(面向切面编程)的一种思想。
2、代理对象和被代理对象都实现了相同接口。
3、动态代理是指系统根据要代理的接口,自动帮我们生成并编译和加载代理类(实现了要代理接口),并将代理类中的代理逻辑抽象到 InvocationHandler 中,由开发者实现。静态代理中,我们需要自己实现代理类,将代理逻辑也写在代理类里面。而动态代理省去了我们自己写代理类的工作,系统只需要知道要代理的接口,然后利用反射获取接口的方法信息,生成代理类,代理类其实只是些模板代码,而又为了能定制代理逻辑,系统便定义了一个 InvocationHandler,代理类中的方法都会调用 InvocationHandler 中的invoke方法,并将代理类对象,接口的方法对象,方法参数传入。所以真正的代理逻辑在 InvocationHandler 类中;

public static Object newProxyInstance(ClassLoader loader,
                                      Class<?>[] interfaces,
                                      InvocationHandler h)

Proxy.newProxyInstance方法用来生成代理,并返回代理接口实例,对该实例调用的方法,都会转移到代理类中。
loader 参数用来加载自动生成的代理类,interfaces 参数为要代理的接口数组,h参数为我们要自己实现的代理逻辑类。

public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable;

InvocationHandler 的invoke方法中, proxy 参数是系统帮我们生成的代理类对象,method参数为当前调用的方法对象,args为方法的参数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值