小编les*_*v l的帖子

如何检测自定义类加载器加载的类?

我试图修改几个类的字节码,这些类的打包 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)

java instrumentation classloader javaagents javassist

4
推荐指数
1
解决办法
2893
查看次数