JDK动态代理与CGLIB动态代理

JDK动态代理

生成代理对象的时候会调用jdk自动生成的代理类的构造方法,将传入的InvocationHandler赋值给了Proxy的属性h。

当代理类调用方法时,就会去调用程序员自己写的invocationHandler的invoke方法的逻辑,即代码super.h.invoke方法的调用。 

CGLIB动态代理

obj为生成的代理类,firstInstance根据传入的obj代理类去生成代理对象。

setThreadCallbacks方法将程序员写的callbacks放到代理类的对象ThreadLocal属性中。 

ReflectUtils.newInstance方法就是在创建代理对象。

SET_THREAD_CALLBACKS_NAME为代理类中设置ThreadLocal属性的方法的名称。

 在setCallbacksHelper方法中,根据methodName方法名称,反射调用method,最终实现调用上面图片中的方法,为属性赋值。因为该方法时static的,所以通过反射调用的时候,不需要传入对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值