首页 > Java > java教程 > 正文

JDK 和 CGLib 动态代理获取代理对象为 Null 的原因是什么?

花韻仙語
发布: 2024-11-04 19:19:14
原创
1058人浏览过

jdk 和 cglib 动态代理获取代理对象为 null 的原因是什么?

jdk 动态代理获取代理对象为 null 的问题

jdk 动态代理通过 proxy.newproxyinstance 生成代理对象,需要满足一定的条件,即目标类的接口必须实现自某个接口(一般是 java.lang.reflect.invocationhandler),并且该接口中的方法全部被 null 覆盖。

在你的代码中,invocationhandler 中的方法都被 null 覆盖了,但这导致了一个问题:无法从代理对象中调用实际的目标方法。要解决这个问题,需要在 invocationhandler 中覆盖 invoke 方法,并调用目标方法。

修改后的 invocationhandler:

invocationhandler h = new invocationhandler() {

    @override
    public object invoke(object proxy, method method, object[] args) throws throwable {
        return method.invoke(target, args);
    }

};
登录后复制

cglib 动态代理获取代理对象为 null 的问题

钉钉 AI 助理
钉钉 AI 助理

钉钉AI助理汇集了钉钉AI产品能力,帮助企业迈入智能新时代。

钉钉 AI 助理 21
查看详情 钉钉 AI 助理

cglib 动态代理不需要目标类实现接口,而是直接继承目标类的字节码,然后重写目标类中的方法。

在你的代码中,methodinterceptor 中的方法全部被 null 覆盖了,这与 jdk 动态代理中 invocationhandler 中的方法全部被 null 覆盖类似,会导致无法从代理对象中调用实际的目标方法。

要解决这个问题,需要在 methodinterceptor 中覆盖 intercept 方法,并调用目标方法。

修改后的 methodinterceptor:

MethodInterceptor methodInterceptor = new MethodInterceptor() {

    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        return method.invoke(target, args);
    }

};
登录后复制

以上就是JDK 和 CGLib 动态代理获取代理对象为 Null 的原因是什么?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号