我试图修改几个类的字节码,这些类的打包 jar 文件不在类路径中 - 它们ClassLoader在运行时由自定义加载给定 URL。我试图使用java agentwithClassFileTransformer希望拦截这些类,但失败了。类加载器是遗留项目的一部分,因此我无法直接对其进行更改。
代理在 AppClassLoader “本地”加载的类上工作正常,但只是忽略自定义类加载器加载的类。
自定义类加载器:
public class CustomClassLoader extends URLClassLoader {
public CustomClassLoader(URL[] urls) {
super(urls, CustomClassLoader.class.getClassLoader());
}
// violates parent-delegation pattern
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
synchronized (getClassLoadingLock(name)) {
Class<?> clazz = findLoadedClass(name);
if (clazz == null) {
try {
clazz = findClass(name);
} catch (ClassNotFoundException e) {
}
if (clazz == null) {
clazz = getParent().loadClass(name);
}
}
if …Run Code Online (Sandbox Code Playgroud)