文章目录

问题

希望通过Javaagent在RabbitMq中传递参数,RabbitMq的核心方法传递的参数可能为null,如果为null需要手动构造一个实例添加进去。
手动构造的过程中为什么Class.forName(className)不行,但是ClassLoader.loadClass(className)可以?

原因

https://blog.csdn.net/dataiyangu/article/details/86321678
在javaagent中通过反射构建一个对象,为什么Class.forName(className)不行,但是ClassLoader.loadClass(className)可以?

Class.forName(className)装载的class已经被初始化,而
ClassLoader.loadClass(className)装载的class还没有被link。一般情况下,这两个方法效果一样,都能装载Class。但如果程序依赖于Class是否被初始化,就必须用Class.forName(name)了。

javaagent是在类加载进入jvm的时候注入进去的,而Class.forName(className)已经初始化完成了,所以不能在javaagent中使用这种方式构造。

相关文章:

  • 2021-10-08
  • 2022-03-06
  • 2021-12-12
  • 2021-10-14
  • 2022-12-23
猜你喜欢
  • 2021-08-08
  • 2021-10-10
  • 2022-12-23
  • 2021-12-30
相关资源
相似解决方案