问题
希望通过Javaagent在RabbitMq中传递参数,RabbitMq的核心方法传递的参数可能为null,如果为null需要手动构造一个实例添加进去。
手动构造的过程中为什么Class.forName(className)不行,但是ClassLoader.loadClass(className)可以?
原因
https://blog.csdn.net/dataiyangu/article/details/86321678
Class.forName(className)装载的class已经被初始化,而
ClassLoader.loadClass(className)装载的class还没有被link。一般情况下,这两个方法效果一样,都能装载Class。但如果程序依赖于Class是否被初始化,就必须用Class.forName(name)了。
javaagent是在类加载进入jvm的时候注入进去的,而Class.forName(className)已经初始化完成了,所以不能在javaagent中使用这种方式构造。