相关疑难解决方法(0)

如何使用自定义ClassLoader?

大家好,感谢您的关注!我有一个既容易又明显的问题,但我被卡住了.

我想通过自定义ClassLoader提供动态创建的Java类,供第三方库使用.

现在我的问题是:当我不自己直接加载这些类时,如何设置我的自定义ClassLoader来加载这些类?

我想当我使用我的ClassLoader加载某个类时,它就变成了这个类的ClassLoader,并且从该类加载的所有类都将通过我的ClassLoader引导.

我按照这个官方教程创建了一个自定义的ClassLoader:http://java.sun.com/developer/onlineTraining/Security/Fundamentals/magercises/ClassLoader/help.html.

public class DynamicClassloader extends ClassLoader {

    private Map<String, Class<?>> classesMap = new HashMap<String, Class<?>>();

    public DynamicClassloader(ClassLoader parent) {
        // Also tried super(parent);
        super(sun.misc.Launcher.getLauncher().getClassLoader());
    }

    // Adding dynamically created classes
    public void defineClass(String name, Class<?> clazz) {
        classesMap.put(name, clazz);
    }

    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        // load from parent
        Class<?> result = findLoadedClass(name);
        if (result != null) {
            return result;
        }
        try {
            result = findSystemClass(name);
        } catch (Exception …
Run Code Online (Sandbox Code Playgroud)

java classloader

29
推荐指数
1
解决办法
3万
查看次数

是否可以在Java中进行猴子修补,如果没有替代方案?

这是8年前在这里被问到的,从那时起已经过了8年.我想再次问这个问题,看看是否有人开发了一个猴子修补的框架,工具或库.

基本上我需要它是一个java应用程序,我应用自己的补丁.由于这个项目由另一个团队维护,我希望能够保留/应用我制作的任何补丁,以及他们制作的补丁.

java monkeypatching

10
推荐指数
2
解决办法
3332
查看次数

为什么自定义系统类加载器不起作用?

我正在尝试使用标志覆盖系统的类加载器-Djava.system.class.loader=MyLoader.但是,MyLoader在加载类时仍未使用.

MyLoader的代码:

public class MyLoader extends ClassLoader {
    public MyLoader(ClassLoader parent) {
        super(S(parent));
    }

    private static ClassLoader S(ClassLoader cl) {
        System.out.println("---MyLoader--- inside #constructor(" + cl + ")...");
        return cl;
    }

    @Override
    public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
        System.out.println("---MyLoader--- inside loadClass(" + name + ", " + resolve + ")...");
        return super.loadClass(name, resolve);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是主要代码:

public class Main {
    public static void main(final String args[]) throws Exception {
        System.out.println("---Main--- first line");
        System.out.println("---Main--- …
Run Code Online (Sandbox Code Playgroud)

java classloader

5
推荐指数
2
解决办法
3816
查看次数

如何在C和JAVA中的main()之前执行特定的函数?

我想在C和JAVA语言的main函数之前执行一个函数.我知道一种方法,就是#pragma在C语言中使用指令.在这两种语言中还有其他方法吗?

c java pragma

4
推荐指数
2
解决办法
7128
查看次数

标签 统计

java ×4

classloader ×2

c ×1

monkeypatching ×1

pragma ×1