欢迎访问 如意编程网!

如意编程网

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

综合教程

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

发布时间:2023/10/11 综合教程 516 老码农
如意编程网 收集整理的这篇文章主要介绍了 动态修改字节码以替换用反射调用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方法的形式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得如意编程网网站内容还不错,欢迎将如意编程网推荐给好友。