我试图通过在调用方法的地方替换每个对Class.forName的方法调用来捕获正在加载的类(该方法中的回调不是一种选择)。即

...
Class.forName(className);
...


被替换为

...
Class.forName(MyProxy.call(className));
...


我的问题是尝试使用Class.forName(String,boolean,ClassLoader)方法做同样的事情。我的想法是执行以下操作:

Class.forName(MyProxy.call(className),booleanParameter,classLoaderParameter)

但是,我找不到实现此目的的方法。不能使用using和invokeStatic,因为例如在保护类的情况下Class.forName将无法正常工作

最佳答案

感谢@Holger的建议,我能够找到一个解决方案,最后我的代码替换了:

...
Class.forName(className, booleanParameter, loader);
...




...
__callClassForName(className, booleanParameter, loader);
...

private static Class __callClassForName(String className, boolean bParameter, ClassLoader loader) {
    MyProxy.call(className);
    return Class.forName(className, bParameter, loader);
}

关于java - 替换ASM中的Class.forName方法调用(内联),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52287471/

10-10 19:34