Java-代理

本文详细解析了JDK动态代理与CGLIB动态代理的工作原理。JDK代理通过反射生成实现了目标接口的代理类,而CGLIB则通过字节码生成技术创建目标类的子类。两种方式均能在运行时动态生成代理对象,实现方法的拦截与增强。

Jdk动态代理(代理接口)

通过获取委托类实现的所有接口,为每个接口方法创建一个代理方法,通过ProxyGenerator.generateProxyClass动态生成代理类字节码文件并加载
,反射生成代理对象,代理对象调用的时候通过自定义的InvocationHandler(super.h)调用invoke方法,在回调方法invoke中,使用反射调用原
对象的方法method.invoke(target, args);


动态生成的代理类关键代码

Cglib动态代理(代理类) 通过继承一个委托类,通过ASM框架strategy.generate(this)动态生成代理子类字节码文件并加载,反射生成对象,调用
的时候可以通过实现MethodInterceptor接口的intercept拦截方法,进行拦截, intercept方法中,前后增加处理代码,然后调用
proxy.invokeSuper(obj, args); (该方法,最终调用父类方法如super.add().),如果不拦截,则默认直接调用父类方法


动态生成的代理类关键代码

参考文献:

https://www.cnblogs.com/MOBIN/p/5597215.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuhaojavax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值