2种动态代理方式的性能测试(JDK1.8 JDK > Cglib)

本文详细探讨了JDK和Cglib两种动态代理技术的实现方式,通过性能测试展示了在不同JDK版本下两者创建代理对象和调用方法的效率。测试结果显示,在JDK1.8中,JDK动态代理的性能优于Cglib。总结指出,虽然Cglib在大量调用时可能更快,但在JDK1.8以后的优化使得JDK代理效率提升,成为首选。

目录

动态代理

JDK动态代理实现

cglib动态代理

测试

创建代理对象的性能测试

调用代理对象方法的性能测试

总结

Cglib执行速度比JDK快? 不同jdk版本不一样。

JDK 1.8  动态代理 JDK > Cglib


动态代理

JDK动态代理实现

技术:java反射

前提:代理的类实现了接口。

通过newProxyInstance()函数获得proxy对象,这个对象就代理了实现了这个接口所有的类,然后使用这个代理对象即可。 代理对象会自动调用相应的方法。比如

  • IRpcHelloService RpcHello = RpcProxy.create(IRpcHelloService.class);

  • System.out.println(RpcHello.hello("Tom老师"));

RpcHello IRpcHelloService.class这个接口的代理类,IRpcHelloServiceImpl实现了这个接口,那么RpcHello.hello("Tom老师")就相当于调用了IRpcHelloServiceImpl中的hello方法。

newProxyInstance,方法有三个参数:

loader: 用哪个类加载器去加载代理对象

interfaces:动态代理类需要实现的接口

h:动态代理方法在执行时,会调用h里面的invoke方法去执行

public class ProxyHost implements InvocationHandler {

    private Object target;
	// 注入一个实现类  
    public void setTarget(Object target) {
        this.target = target;
    }
	// 根据实现类  拿到其实现的方法
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                target.getClass().getInterfaces(),this);
    }
    // 在使用时直接调用方法即可  
    // 调用时就会通过 invoke来实现
    @Over
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

trigger333

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

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

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

打赏作者

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

抵扣说明:

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

余额充值