欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 综合教程 >内容正文

综合教程

动态修改字节码以替换用反射调用get set方法的形式

发布时间:2023/10/11 综合教程 1023 老码农
生活随笔 收集整理的这篇文章主要介绍了 动态修改字节码以替换用反射调用get set方法的形式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. 起因

在前两天,为了解决websphere和JDK8上部署的应用发起webservice调用(框架用的cxf)时报错的问题,跟了一些代码,最终发现可以通过加上参数-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true来解决。

2. ClassTailor.noOptimize优化了什么

分析jaxb的代码分析,由于webservice调用要用到xml与bean对象的转换,于是就是用到对bean字段的get set。通常的想法此处用反射便可以完成。但是jaxb在这里用了动态生成字节码的方式直接调用bean的get set方法,以达到节提升性能的目的,本质上就是换了class文件中常量池的UFT8字符串

具体可以参见com.sun.xml.bind.v2.bytecode.ClassTailor类,com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector 类。

3. 按他的方式做一个demo

demo代码打包在这里下载,可以跑起来的

总结

以上是生活随笔为你收集整理的动态修改字节码以替换用反射调用get set方法的形式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。