用自定义类加载器替换整体代码中的Java类

huangapple 未分类评论42阅读模式
英文:

Replace Java class in overall code with custom class loader

问题

我有一个Java应用程序,我想创建一个类加载器(Class Loader)来将所有Java类的调用/实例替换为另一个类。

我创建了这个类加载器:

public class CustomClassLoader extends ClassLoader {
    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {

        if (name.equals("qualified.name.of.original.Class")) {
            return super.findClass("qualified.name.of.New.Class");
        }

        return super.findClass(name);
    }

    @Override
    public Class<?> loadClass(String name) throws ClassNotFoundException {
        if (name.equals("qualified.name.of.original.Class")) {
            return super.loadClass("qualified.name.of.New.Class");
        }

        return super.loadClass(name);
    }

}

然后我使用-Djava.system.class.loader=qualified.name.of.CustomClassLoader启动我的应用程序。

但是它不起作用,原始的类仍然像往常一样被使用。我如何实现预期的结果?

英文:

I have a Java application and I want to create a Class Loader to substitute all invokation/instance of a Java classes to another one

I made this class loader:

public class CustomClassLoader extends ClassLoader {
    @Override
    protected Class&lt;?&gt; findClass(String name) throws ClassNotFoundException {

        if (name.equals(&quot;qualified.name.of.original.Class&quot;)) {
            return super.findClass(&quot;qualified.name.of.New.Class&quot;);
        }

        return super.findClass(name);
    }

    @Override
    public Class&lt;?&gt; loadClass(String name) throws ClassNotFoundException {
        if (name.equals(&quot;qualified.name.of.original.Class&quot;)) {
            return super.loadClass(&quot;qualified.name.of.New.Class&quot;);
        }

        return super.loadClass(name);
    }

}

Then I start my application with -Djava.system.class.loader=qualified.name.of.CustomClassLoader

But it doesn't work, the original class is used as usual. How can I achieve the result?

huangapple
  • 本文由 发表于 2020年4月9日 17:35:23
  • 转载请务必保留本文链接:https://java.coder-hub.com/61118088.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定